[Keine Notwendigkeit, eine lokale Umgebung zu erstellen] Stellen Sie eine mit Cloud 9 erstellte Python-Flaschenanwendung für Heroku bereit

Einführung

Dies ist ein Memo für mich, die Details sind wie folgt.

Voraussetzungen

Was ich getan habe

[Cloud 9] Erstellen eines Arbeitsbereichs

https://c9.io/new Erstellen Sie einen Arbeitsbereich, indem Sie Python unter Vorlage auswählen angeben image

[Cloud 9] Python-Versions-Upgrade

Standardmäßig verfügt Cloud9 über eine Python-Version von Python2. Ändern Sie diese daher in Python3.5.1. Drücken Sie die grüne + -Taste am unteren Bildschirmrand, um ein Terminal mit [Neues Terminal] zu öffnen und dort Befehle einzugeben. image

#Überprüfen Sie die Version vor dem Ändern
$ python --version
Python 2.7.6

#Speichern Sie das Python2-System
$ sudo mv /usr/bin/python /usr/bin/python2

#Python3.Link zu 5
$ sudo ln -s /usr/bin/python3.5 /usr/bin/python

#Bestätigen Sie, dass sich die Version geändert hat
$ python --version
Python 3.5.1

[Wolke 9] Einführung der Flasche

Wenn es so bleibt, wie es ist, ist die diesmal zu verwendende Flasche nicht im Lieferumfang enthalten. Installieren Sie sie daher.

$ sudo pip install bottle
Downloading/unpacking bottle
  Downloading bottle-0.12.9.tar.gz (69kB): 69kB downloaded
  Running setup.py (path:/tmp/pip_build_root/bottle/setup.py) egg_info for package bottle
    
Installing collected packages: bottle
  Running setup.py install for bottle
    changing mode of build/scripts-3.5/bottle.py from 644 to 755
    
    changing mode of /usr/local/bin/bottle.py to 755
Successfully installed bottle
Cleaning up...

[Cloud 9] Löschen Sie alle Dateien

Löschen Sie vorerst alle ursprünglich generierten Dateien. image

[Cloud 9] Erstellen und Codieren von app.py.

Erstellen Sie eine Datei mit [Rechtsklick] => [Neue Datei] und geben Sie app.py mit [Rechtsklick] => [Umbenennen] in die erstellte Datei ein. image

Schließlich werden wir app.py von hier aus implementieren. Wenn Sie in Ihrem Browser auf http: // {your-domain} / hello / zugreifen, wird in erster Linie Hello World angezeigt.

app.py


# -*- coding:utf-8 -*-

import os
from bottle import route, run


@route('/hello/')
def hello():
    return "Hello World"


run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))

[Cloud 9] Versuchen Sie zu laufen

Wenn Sie auf die Schaltfläche Ausführen klicken und diese ausführen, wird die URL angezeigt, die im Browser angezeigt werden soll. Öffnen Sie sie daher. Vergessen Sie zu diesem Zeitpunkt nicht, "/ hello /" mit dem am Ende festgelegten Routing hinzuzufügen. image

Es wurde sicher im Browser angezeigt !! image

[Cloud 9] Commit für GitHub

Sobald Sie dies getan haben, verpflichten Sie sich zu GitHub.

Erstellen Sie zunächst ein neues Repository auf GitHub. https://github.com/new

Sie müssen den SSH-Schlüssel registrieren, um von Cloud9 auf GitHub zu übertragen. Registrieren Sie den öffentlichen Schlüssel, der durch [Zahnradmarke] => [SSH-Schlüssel] oben rechts im Cloud 9-Dashboard angezeigt wird, für den verknüpften GitHub. https://c9.io/account/ssh => https://github.com/settings/ssh

Drücken Sie den Schlüssel nach dem Registrieren auf das Cloud 9-Terminal.


#Achten Sie auf das auszuführende Verzeichnis
$ pwd
/home/ubuntu/workspace

#Generieren Sie die für die Bereitstellung erforderlichen Dateien
$ pip freeze | grep bottle > requirements.txt #Es scheint besser, nur das Paket zu platzieren, das Sie verwenden
$ python --version | sed 's/\ /-/g' |sed 's/P/p/g' > runtime.txt
$ echo web: python app.py > Procfile 

#Das Folgende dient nur als Referenz. Kopieren Sie den Befehl, der auf dem Bildschirm des neu erstellten Repositorys angezeigt wird.
$ echo "# cloud9-bottle-heroku" >> README.md
git init
git add .
git commit -m "first commit"
git remote add origin https://github.com/path/to-youre-repository.git #Bitte beachten Sie, dass dies von der Person abhängt
git push -u origin master

[Cloud 9] für Heroku bereitstellen

Als nächstes werden wir es in Heroku reflektieren und weiterhin im Cloud 9-Terminal arbeiten. Der Heroku-Werkzeuggürtel scheint im Voraus installiert worden zu sein, daher ist keine Ergänzung erforderlich.

#Melden Sie sich zuerst bei Heroku an.
$ heroku login

#Erstellen Sie eine App(Bitte ändern Sie dies entsprechend, damit der Name nicht abgedeckt wird)
$ heroku create cloud9-bottle-heroku
Creating cloud9-bottle-heroku... done, stack is cedar-14
https://cloud9-bottle-heroku.herokuapp.com/ | https://git.heroku.com/cloud9-bottle-heroku.git

$ git push heroku master
Counting objects: 21, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (21/21), 1.95 KiB | 0 bytes/s, done.
Total 21 (delta 5), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Python app detected
remote: -----> Installing python-3.5.1
remote:      $ pip install -r requirements.txt
remote:        Collecting bottle==0.12.9 (from -r requirements.txt (line 1))
remote:          Downloading bottle-0.12.9.tar.gz (69kB)
remote:        Installing collected packages: bottle
remote:          Running setup.py install for bottle: started
remote:            Running setup.py install for bottle: finished with status 'done'
remote:        Successfully installed bottle-0.12.9
remote: 
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote: 
remote: -----> Compressing...
remote:        Done: 49M
remote: -----> Launching...
remote:        Released v3
remote:        https://cloud9-bottle-heroku.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/cloud9-bottle-heroku.git
 * [new branch]      master -> master

Ich konnte es im Browser öffnen !! https://cloud9-bottle-heroku.herokuapp.com/hello/ image

[Heroku] GitHub-Zusammenarbeit

Ändern Sie die Einstellung so, dass sie automatisch für Heroku bereitgestellt wird, wenn Sie sie an GitHub senden. Wählen Sie die Zielanwendung im Dashboard von Heroku aus und wählen Sie oben auf dem Bildschirm Bereitstellen aus. image

Wählen Sie in der Bereitstellungsmethode GitHub aus, geben Sie den Repository-Namen in Mit GitHub verbinden ein, suchen Sie und verbinden Sie, wo das Ziel-Repository angezeigt wird. image

Wählen Sie den entsprechenden Zielzweig aus und klicken Sie auf Automatische Bereitstellungen aktivieren, um die Einstellung abzuschließen. image

Sie können anhand der Aktivität oben auf dem Bildschirm überprüfen, ob die automatische Bereitstellung funktioniert. Versuchen Sie, ein leeres Commit vom Cloud 9-Terminal aus zu übertragen, um festzustellen, ob die Bereitstellung tatsächlich abgeschlossen ist.

 $ git commit --allow-empty -m "deploy test"
[master 9912982] deploy test

$ git push origin master

Warten Sie nach der Eingabe des Befehls etwa eine Minute und öffnen Sie dann die Registerkarte Aktivität, um festzustellen, ob die Bereitstellung ausgeführt wurde. image

Selbst wenn Sie git push heroku master nicht verwenden, können Sie jetzt auf GitHub pushen und das Update wird auf der Heroku-Seite angezeigt.

Wo ich süchtig war

Inhalt der Anforderungen.txt

Es scheint besser, es auf das notwendige Minimum zu beschränken.

#Der Erste
$ pip freeze > requirements.txt

#Ich wurde wütend auf eine Abhängigkeit, als ich zu Heroku drängte
$ git push heroku master                                                                                                                                  
Counting objects: 18, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (13/13), done.
Writing objects: 100% (18/18), 1.73 KiB | 0 bytes/s, done.
Total 18 (delta 4), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Python app detected
remote: -----> Installing python-3.5.1
remote:      $ pip install -r requirements.txt
remote:        Collecting Pillow==2.3.0 (from -r requirements.txt (line 1))
remote:          Downloading Pillow-2.3.0.zip (2.4MB)
remote:        Collecting bottle==0.12.9 (from -r requirements.txt (line 2))
remote:          Downloading bottle-0.12.9.tar.gz (69kB)
remote:        Collecting chardet==2.2.1 (from -r requirements.txt (line 3))
remote:          Downloading chardet-2.2.1-py2.py3-none-any.whl (180kB)
remote:        Collecting colorama==0.2.5 (from -r requirements.txt (line 4))
remote:          Downloading colorama-0.2.5.zip
remote:        Collecting decorator==3.4.0 (from -r requirements.txt (line 5))
remote:          Downloading decorator-3.4.0.tar.gz
remote:        Collecting html5lib==0.999 (from -r requirements.txt (line 6))
remote:          Downloading html5lib-0.999.tar.gz (885kB)
remote:        Collecting ipython==1.2.1 (from -r requirements.txt (line 7))
remote:          Downloading ipython-1.2.1.tar.gz (8.7MB)
remote:        Collecting matplotlib==1.3.1 (from -r requirements.txt (line 8))
remote:          Downloading matplotlib-1.3.1.tar.gz (42.7MB)
remote:        Collecting nose==1.3.1 (from -r requirements.txt (line 9))
remote:          Downloading nose-1.3.1.tar.gz (274kB)
remote:        Collecting numpy==1.8.2 (from -r requirements.txt (line 10))
remote:          Downloading numpy-1.8.2.tar.gz (3.8MB)
remote:        Collecting pycurl==7.19.3 (from -r requirements.txt (line 11))
remote:          Downloading pycurl-7.19.3.tar.gz (113kB)
remote:        Collecting pygobject==3.12.0 (from -r requirements.txt (line 12))
remote:          Could not find a version that satisfies the requirement pygobject==3.12.0 (from -r requirements.txt (line 12)) (from versions: 2.28.3)
remote:        No matching distribution found for pygobject==3.12.0 (from -r requirements.txt (line 12))
remote: 
remote:  !     Push rejected, failed to compile Python app
remote: 
remote: Verifying deploy....
remote: 
remote: !       Push rejected to cloud9-bottle-heroku.
remote: 
To https://git.heroku.com/cloud9-bottle-heroku.git
 ![remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/cloud9-bottle-heroku.git'

#Es war okay, wenn ich es drückte.
$ pip freeze | grep bottle > requirements.txt

Notation von runtime.txt

Als ich das Ergebnis der Python-Version druckte, war es Python anstelle von Python.

#Schlechtes Beispiel
Python-3.5.1

#Gutes Beispiel
python-3.5.1

abschließend

Dank Cloud9 ist es nicht erforderlich, eine lokale Umgebung zu erstellen, aber aus irgendeinem Grund bleibt die Bewegung manchmal hängen, und in meiner Umgebung war die Entwicklung mit PyCharm ein angenehmerer Eindruck. In Anbetracht des Falls der Entwicklung mit mehreren Terminals halte ich es jedoch für schwierig, diese Entwicklungsumgebungen anzuordnen, sodass ich denke, dass es in einem solchen Fall eine Option gibt. Da Heroku diesmal nur das Minimum verwendet, gibt es viele Teile, die ich noch nicht gut verstehe, und es scheint, dass ich 6 Stunden am Tag schlafen muss, aber es ist schön, die Anwendung ohne detaillierte Einstellungen veröffentlichen zu können. ..

Referenz

Heroku Python Support | Heroku Dev Center : https://devcenter.heroku.com/articles/python-support Veröffentlichen Sie eine Web-App in 4 Minuten 33 Sekunden mit Heroku x Flasche --Qiita: http://qiita.com/ohbarye/items/55ec574f10685a012baf

Recommended Posts

[Keine Notwendigkeit, eine lokale Umgebung zu erstellen] Stellen Sie eine mit Cloud 9 erstellte Python-Flaschenanwendung für Heroku bereit
Bis die mit Flasche erstellte Webanwendung auf Heroku veröffentlicht (bereitgestellt) wird
Webanwendung erstellt mit Python3.4 + Django (Teil.1 Umgebungskonstruktion)
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
[Cloud 9] Versuchen Sie, eine Umgebung mit Django 1.11 von Python 3.4 zu erstellen, ohne auch nur 1 mm zu verstehen
So stellen Sie eine mit Flask erstellte Web-App für Heroku bereit
Erstellen einer Entwicklungsumgebung für die Python2.7-Serie mit Vagrant
Webanwendung mit Python3.3.1 + Flasche (1) - Ändern Sie die Vorlagen-Engine in jinja2
[AWS] Flask-Anwendungsbereitstellungsversion, die versucht hat, eine Python-Umgebung mit eb zu erstellen [Elastic Beanstalk]
Erstellen Sie eine MySQL + Python-Umgebung mit Docker
Lernverlauf zur Teilnahme an der Entwicklung von Teamanwendungen mit Python ~ Build Docker / Django / Nginx / MariaDB-Umgebung ~
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
Laden Sie Dateien in den Cloud Storage (GCS) von GCP hoch. ~ Laden Sie mit lokalem Python
So erstellen Sie eine Python- und Jupyter-Ausführungsumgebung mit VSCode
[AWS] Vorbereitung der Bereitstellung von Flask-Anwendungen zum Erstellen einer Python-Umgebung mit eb [Elastic Beanstalk]
Erstellen Sie mit Docker auf RaspberryPi3 eine Python + Flasche + MySQL-Umgebung! [Einfache Konstruktion]
Mit Docker durchgeführte Umgebungswartung (Ich möchte GrADS in Python nachbearbeiten
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Was tun, wenn die Python-Version in Cloud 9 von einer anderen Person erstellt wurde?
Wettbewerbsprogrammierung mit Python Lokale Umgebungseinstellungen
Ändern Sie die Python 64-Bit-Umgebung mit Anaconda in eine 32-Bit-Umgebung
Methode zum Erstellen einer Python-Umgebung in Xcode 6
Ich möchte eine Python-Umgebung erstellen
Erstellen Sie eine Python-Umgebung mit Anaconda auf einem Mac
[Python] Eine schnelle Webanwendung mit Bottle!
Starten Sie die Umgebung mit LineBot + Heroku + Docker + Python
Erstellen Sie mit pyenv eine virtuelle Umgebung für Python
Erstellen Sie eine Python + OpenCV-Umgebung in Cloud9
Erstellen Sie mit Neovim eine moderne Python-Umgebung
Aufbau einer KI / maschinellen Lernumgebung mit Python
Erstellen Sie mit Docker auf RaspberryPi3 eine Python + Flasche + MySQL-Umgebung! [Versuch und Irrtum]
Erstellen Sie eine lokale Entwicklungsumgebung mit WSL + Docker Desktop für Windows + Docker-Lambda + Python
[Python] So erstellen Sie eine lokale Webserverumgebung mit SimpleHTTPServer und CGIHTTPServer
Hochladen mit Heroku, Flask, Python, Git (4)
Ich habe eine GUI-App mit Python + PyQt5 erstellt
Erstellen Sie eine Python-Umgebung mit pyenv auf EC2 (Ubuntu)
Erstellen Sie eine Python-Entwicklungsumgebung mit Visual Studio Code
Erstellen Sie eine Python-Umgebung mit ansible auf centos6
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Erstellen Sie mit Sublime Text3 eine Python3-Build-Umgebung
Erklären, wie LINE BOT auf einfachste Weise der Welt erstellt werden kann (2) [Vorbereiten der Bot-Anwendung in einer lokalen Umgebung mit Django of Python]
Erstellen einer Python-Umgebung mit OSX Elcapitan
Erstellen Sie mit IntelliJ schnell eine Python Django-Umgebung
[Einführung in die Udemy Python3 + -Anwendung] 9. Drucken Sie zunächst mit print
Von der Python-Umgebungskonstruktion zur virtuellen Umgebungskonstruktion mit Anaconda
Erstellen Sie eine Python-Umgebung für maschinelles Lernen mit Containern
Erstellen Sie eine Python-Ausführungsumgebung mit VS-Code
Ausnahme: Sie benötigen einen C-Compiler, um einen uWSGI-Fehler in Python: 3.8-alpine zu erstellen
Ich habe versucht, mit Python (Mac OS X) eine Umgebung für maschinelles Lernen zu erstellen.
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
So stellen Sie eine Django-Anwendung in der Alibaba-Cloud bereit
Hochladen mit Heroku, Flask, Python, Git (Teil 3)
Erstellen Sie mit pyenv-virtualenv eine Python-Umgebung für jedes Verzeichnis
Ich habe eine Python3-Umgebung unter Ubuntu mit direnv erstellt.
So erstellen Sie eine Django (Python) -Umgebung auf Docker
Ich habe versucht, eine ML-Pipeline mit Cloud Composer zu erstellen