[GO] Ein Memo, das ein Tutorial zum Ausführen von Python auf Heroku erstellt hat

Persönliche Notizen

Ich habe ein Python-Tutorial für Heroku gemacht. https://devcenter.heroku.com/articles/getting-started-with-python Ich habe es als Memo hinterlassen, bin aber nicht hängen geblieben, daher wurde es eher ein Befehlsmemo als ein Know-how-Memo.

Annahme

Python wird lokal ausgeführt Es gibt auch virtualenv

Installieren Sie postgresql auf dem Mac

brew intall postgresql

Set für Postgres

echo 'export PGDATA=/usr/local/var/postgres' >> ~/.zshrc #In jedem Profil

Jetzt können Sie mit pg_ctl start oder pg_ctl stop starten / stoppen. (Normalerweise ist es problematisch, weil es mit "postgres -D / usr / local / var / postgres" verwechselt wird.) Überprüfen Sie dies, indem Sie von Anfang an als Postgres-Benutzer eingeben oder die Datenbankliste anzeigen

psql -l #DB-Anzeige
psql postgres #Melden Sie sich als Postgres-Benutzer an(Wenn du gehst\q)

Erstelle ein Konto bei Heroku

https://www.heroku.com/

Installieren Sie die CLI-Tools für Heroku

brew install heroku-toolbelt

Dann loggen Sie sich bei Heroku ein

$ heroku login
Enter your Heroku credentials.
Email: [email]
Password (typing will be hidden):
Logged in as [email]

Von der Vorbereitung der Beispiel-App bis zur Bereitstellung

Klonen Sie die Beispiel-App.

git clone https://github.com/heroku/python-getting-started.git
$ cd python-getting-started

Wenn Sie können, registrieren Sie die App in Heroku

$ heroku create
Creating morning-plateau-xxxx... done, stack is cedar-14
https://morning-plateau-xxxx.herokuapp.com/ | https://git.heroku.com/morning-plateau-xxxx.git
Git remote heroku added

Die App ist mit einem passenden Namen registriert (diesmal Morgen-Plateau-xxxx). Wenn Sie ihm einen Namen geben möchten, setzen Sie ihn nach "create". heroku create sanmple-name-app Zu diesem Zeitpunkt ist die Fernbedienung im lokalen Git mit dem Namen Heroku registriert. Als ich auf die URL zugegriffen habe, sah sie wie eine erste Seite aus.

初期ページっぽいの

Stellen Sie als Nächstes die Beispiel-App bereit

$ git push heroku master
Counting objects: 185, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (91/91), done.
Writing objects: 100% (185/185), 30.52 KiB | 0 bytes/s, done.
Total 185 (delta 80), reused 185 (delta 80)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Python app detected
remote: -----> Installing runtime (python-2.7.9)
remote: -----> Installing dependencies with pip
#Weggelassen, weil es lang ist
remote: -----> Compressing... done, 42.9MB
remote: -----> Launching... done, v4
remote:        https://morning-plateau-xxxx.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy.... done.

Bereitstellung abgeschlossen. Wenn Sie sich die Ausgabe ansehen, können Sie sehen, dass sie nicht nur pusht, sondern irgendwie die Umgebungskonstruktion und die Befehlsausführung.

Starten Sie den Prozess zum Ausführen der App mit dem folgenden Befehl. Ich habe die Skala als 1 angegeben, aber kostet es Geld, sie zu erhöhen? Um es vorerst zu verschieben, "Stellen Sie sicher, dass mindestens eine Instanz der App ausgeführt wird".

$ heroku ps:scale web=1
Scaling dynos... done, now running web at 1:Free.

Wenn ich den Befehl ps ausführe, scheint es sicherlich zu funktionieren.

$ heroku ps
=== web (Free): gunicorn gettingstarted.wsgi --log-file -
web.1: up 2016/01/06 02:36:49 (~ 8m ago)

Übrigens, wenn web = 2 ist, wurde es so. Hmm. (Schau später)

$ heroku ps:scale web=2
Scaling dynos... failed
 !    Cannot update to more than 1 Free size dynos per process type.

Öffnen Sie zum Schluss die App unten

heroku open

Einfach. Zu diesem Zeitpunkt wird die Seite geöffnet.

Protokoll anzeigen

heroku logs
heroku logs --tail #Kann im Schwanz gesehen werden

Procfile?

Schreiben Sie in eine Textdatei im Stammverzeichnis der Anwendung die Befehle, die zum Starten der Anwendung erforderlich sind. Das Procfile der Python-Beispielanwendung war wie folgt.

web: gunicorn gettingstarted.wsgi --log-file -

web ist der Prozesstyp, gefolgt vom Befehl. Bei normalem Start wird der Prozess mit einem Prüfstand ausgeführt. (Was ist Dyno? Hier ist ein leichter Container, in dem Procfile-Befehle ausgeführt werden.) Wenn du es richtig machen willst, "heroku ps".

Standardmäßig ist ein Prüfstand & frei. Wenn 30 Minuten lang kein Zugriff besteht oder Sie sich 18 Stunden oder länger am Tag bewegen, wechseln Sie in den Schlafmodus. Wenn es innerhalb von 18 Stunden ist, wird es jedes Mal gestartet, wenn ein Zugang kommt, aber nach dem Schlafengehen wird es gestartet, so dass es ein wenig schwer wird. Wenn Sie nicht schlafen oder skalieren möchten, wechseln Sie zu Professional.

App-Abhängigkeiten

Wenn sich die Datei require.txt im Stammverzeichnis befindet, scheint Heroku sie als Python-App zu erkennen. Der Inhalt der Anforderung.txt der Beispielanwendung lautet wie folgt.

$ cat requirements.txt
dj-database-url==0.3.0
Django==1.8.1
django-postgrespool==0.3.0
gunicorn==19.3.0
psycopg2==2.6
SQLAlchemy==1.0.4
whitenoise==1.0.6

Heroku installiert die erforderlichen Bibliotheken auf dieser Grundlage, obwohl sie sich geringfügig von denen im Tutorial unterscheiden. Wie Sie wissen, ist dies das gleiche Format wie "Pip Freeze". Da es sich um eine Beispielanwendung handelt, die ich heruntergeladen habe, werde ich vorerst dieselbe Umgebung lokal erstellen. Die Version von Python wird in runtime.txt im Stammverzeichnis geschrieben. (Da ich pyenv verwendet habe, habe ich damit eine Umgebung erstellt.)

$ cat runtime.txt
python-2.7.9
$ pyenv install 2.7.9
$ pyenv virtualenv 2.7.9 sample-app
$ cd [workspace]
$ pyenv local sample-app
$ pip install -r requirements.txt --allow-all-external

Lokal ausführen

Was Sie auf Heroku ausführen, funktioniert lokal.

$ python manage.py collectstatic #Sammeln Sie statische Dateien in Ihrem Projekt an einem Ort
$ heroku local web

Greifen Sie auf http: // localhost: 5000 / zu und bestätigen Sie, dass es funktioniert.

Reflektieren Sie lokale Veränderungen in Heroku

Der Fluss, das Lokal angemessen zu verändern und auf Heroku zu drängen. Ich importiere Anfragen, nehme Änderungen vor, um Anfragen an die entsprechende Site zu überspringen und die Antwort anzuzeigen, und drücke. Fügen Sie zunächst Folgendes zu require.txt hinzu.

requests==2.3.0

Fügen Sie am Anfang von hello / views.py Folgendes hinzu:

import requests

Schreiben Sie die Funktion index wie folgt neu

def index(request):
    r = requests.get('http://httpbin.org/status/418')
    print r.text
    return HttpResponse('<pre>' + r.text + '</pre>')

Lokal ausführen

$ pip install -r requirements.txt --allow-all-external
$ heroku local

Wenn ich zu http: // localhost: 5000 / gehe, wird der Inhalt von http://httpbin.org/status/418 gefunden.

    -=[ teapot ]=-

       _...._
     .'  _ _ `.
    | ."` ^ `". _,
    \_;`"---"`|//
      |       ;/
      \_     _/
        `"""`

süß.

Da es sich sicher geändert hat, werde ich es in Heroku reflektieren.

$ git add .
$ git commit -m "Demo"
$ git push heroku masterg
$ heroku open

Nach Abschluss der Bereitstellung wird dieselbe Teekannenseite geöffnet. Die Bereitstellung auf Heroku ist im Grunde dieser Ablauf.

Add-On hinzufügen

Fügen Sie als Beispiel eine Papierspur hinzu.

$ heroku addons:create papertrail
 !    Please verify your account to install this add-on plan (please enter a credit card) For more information, see https://devcenter.heroku.com/categories/billing Verify now at https://heroku.com/verify

Ich wurde gescholten. Addon scheint überprüft zu haben, um Missbrauch zu verhindern. Ich hatte Angst, die Creca-Informationen zu registrieren und es erneut zu versuchen.

$ heroku addons:create papertrail
Creating papertrail-rigid-xxxx... done, (free)
Adding papertrail-rigid-xxxx to morning-plateau-xxxx... done
Setting PAPERTRAIL_API_TOKEN and restarting morning-plateau-xxxx... done, v6
Welcome to Papertrail. Questions and ideas are welcome ([email protected]). Happy logging!
Use `heroku addons:docs papertrail` to view documentation.

Jetzt bereitgestellt. Sie können die aktuelle Addon-Liste mit dem folgenden Befehl anzeigen.

$ heroku addons
Add-on                                         Plan       Price
─────────────────────────────────────────────  ─────────  ─────
heroku-postgresql (postgresql-octagonal-xxxx)  hobby-dev  free
 └─ as DATABASE

papertrail (papertrail-rigid-xxxx)             choklad    free
 └─ as PAPERTRAIL

The table above shows add-ons and the attachments to the current app (morning-plateau-xxxx) or other apps.

Schauen Sie sich Papertrail an

heroku addons:open papertrail

Der Browser wird geöffnet und Sie können das Protokoll überprüfen.

Konsole

Sie können die Heroku-Konsole mit dem Befehl heroku run COMMAND verwenden. Hier scheint der Befehl auf einem temporären Prüfstand ausgeführt zu werden, der als einmaliger Prüfstand bezeichnet wird.

$ heroku run pwd
Running pwd on morning-plateau-xxxx... up, run.5945
/app
$ heroku run python manage.py shell
Running python manage.py shell on morning-plateau-xxxx... up, run.4047
Python 2.7.9 (default, Dec 11 2014, 17:18:51)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> import requests
>>> print requests.get('http://httpbin.org/status/418').text

    -=[ teapot ]=-

       _...._
     .'  _ _ `.
    | ."` ^ `". _,
    \_;`"---"`|//
      |       ;/
      \_     _/
        `"""`

In ähnlicher Weise können Sie unten Dynos Bash ausführen.

$ heroku run bash
Running bash on morning-plateau-xxxx... up, run.3252
$ ls
app.json  gettingstarted  hello  manage.py  Procfile  Procfile.windows	README.md  requirements.txt  runtime.txt  staticfiles
$ exit
exit

Definition von Einstellvariablen

Festlegen von Variablen und externen Ressourcen wie z. B. geheimen Schlüsseln, die Sie extern ablegen möchten.

Zur Laufzeit werden Konfigurationsvariablen in Umgebungsvariablen übernommen.

Fügen Sie am Anfang von hello / view.py Folgendes hinzu.

import os

Schreiben Sie außerdem "index" wie folgt um

def index(request):
    times = int(os.environ.get('TIMES',3))
    return HttpResponse('Hello! ' * times)

Fügen Sie der lokalen .env-Datei Folgendes hinzu. Schauen Sie hier und die Umgebungsvariablen werden gesetzt.

TIMES=2

Sie können auch Einstellungsvariablen für Heroku mit "heroku config: set" festlegen. Sie können es auch mit "heroku config" überprüfen.

$ heroku config:set TIMES=2
Setting config vars and restarting morning-plateau-xxxx... done
TIMES: 2
$ heroku config
=== morning-plateau-xxxx Config Vars
DATABASE_URL:         xxxx
PAPERTRAIL_API_TOKEN: xxxx
TIMES:                2

Datenbankvorbereitung (kostenloses Postgres-Add-On)

Verschiedene Datenbanken werden ebenfalls von Addon erstellt. Da es sich um ein Addon handelt, können Sie das aktuelle mit "Heroku-Addons" überprüfen. Sie können sehen, dass die URL der Verbindungszieldatenbank in DATABASE_URL von heroku config registriert ist.

heroku config
=== morning-plateau-xxxx Config Vars
DATABASE_URL:         postgres://~~~ #Abkürzung

Der Befehl heroku pg enthält außerdem Details.

$ heroku pg
=== DATABASE_URL
Plan:        Hobby-dev
Status:      Available
Connections: 0/20
PG Version:  9.4.4
Created:     2016-01-05 17:36 UTC
Data Size:   6.4 MB
Tables:      0
Rows:        0/10000 (In compliance)
Fork/Follow: Unsupported
Rollback:    Unsupported
Add-on:      postgresql-octagonal-xxxx

Die Datenbank ist bereits im Beispielprojekt aktiviert, und Sie können darauf zugreifen, indem Sie am Ende der URL "/ db" hinzufügen. Im aktuellen Status wurde die Tabelle jedoch noch nicht erstellt, sodass beim Zugriff ein Fehler auftritt. Führen Sie manage.py migrate in Heroku aus, um eine Tabelle in django zu erstellen.

$ heroku run python manage.py migrate
Running python manage.py migrate on morning-plateau-xxxx... up, run.6683
Operations to perform:
  Synchronize unmigrated apps: messages, hello, staticfiles
  Apply all migrations: admin, sessions, auth, contenttypes
  # ...
  #Abkürzung

Wenn Sie "URL + / db" erneut besuchen, wird bei jedem Besuch eine einfache Seite mit mehr Datensätzen angezeigt, diesmal anstelle eines Fehlers.

DB-Modelle befinden sich in "hello / models.py" und Einstellungen in "Gettingstarted / settings.py". (Ich werde nicht über Django erklären)

Wenn Sie postgresql lokal haben, können Sie aus dem Stammverzeichnis Ihres Projekts auf herokus Datenbank zugreifen mit:

$ heroku pg:psql
---> Connecting to DATABASE_URL
psql (9.4.5, server 9.4.4)
Type "help" for help.

morning-plateau-xxxx::DATABASE=> select * from hello_greeting;
 id |             when
----+-------------------------------
  1 | 2016-01-11 16:09:35.860529+00
  2 | 2016-01-11 16:10:28.385479+00
(2 rows)

Weitere Informationen zu Heroku Postgres finden Sie unter https://devcenter.heroku.com/articles/heroku-postgresql.

Nächster Schritt

Dies ist das Ende des Tutorials. Schließlich werden als nächster Schritt zwei Links bereitgestellt.

Recommended Posts

Ein Memo, das ein Tutorial zum Ausführen von Python auf Heroku erstellt hat
Eine Geschichte über das Ausführen von Python auf PHP auf Heroku
Ein Memorandum, in dem ich über mein persönliches HEROKU & Python (Flask) gestolpert bin
Ein Memo mit Python2.7 und Python3 in CentOS
Ein Memorandum zum Berühren von Python Flask mit Heroku
Python OpenCV Tutorial Memo
Memo mit Python mit HiveServer2 von EMR verbunden
[Heroku] Memo zum Bereitstellen von Python-Apps mit Heroku unter Windows [Python]
Hinweise zur Installation von Chainer 1.5 für GPU unter Windows
Memo zur Bereitstellung von Django × Postgresql auf Docker für Heroku
kanonischer Python-Ausdruck oder Match-Objekt-Memo
Ein Hinweis zum Ausprobieren eines einfachen MCMC-Tutorials auf PyMC3
Umgang mit Python auf Mac
Aufzeichnung der Höllenstunden, die Python-Anfängern auferlegt wurden
So entwickeln Sie in einer virtuellen Python-Umgebung [Memo]
[GCP] Ein Memorandum zum Ausführen eines Python-Programms mit Cloud-Funktionen
Ein Memo, dass ich eine Grundfunktion in Python mit Wiederholung geschrieben habe
Erstellen einer Python-Umgebung auf einem Mac
Python-Umgebungskonstruktionsnotiz unter Windows 10
Eine gute Beschreibung der Python-Dekorateure
[Python] Operationsnotiz von Pandas DataFrame
Erstellen einer Python-Umgebung unter Ubuntu
[Python] Ein Memorandum der schönen Suppe4
Erstellen Sie eine Python-Umgebung auf dem Mac (2017/4)
Eine kurze Zusammenfassung der Python-Sammlung
Konstruktionsnotiz für die Python-Umgebung auf dem Mac
Python + Django + Scikit-Learn + Mecab (1) mit Heroku
"Python Startbook" Python3-kompatibles Memo
Python + Django + Scikit-Learn + Mecab (2) mit Heroku
Erstellen Sie eine Python-Umgebung in Centos
Problem mit Python json.loads (), das str in Heroku zurückgibt
Erstellen einer Umgebung für Python3.8 auf einem Mac
[Python] Memo zum Erstellen von Scraping-Tools
Separate Python-Diagramme (Memo)
Erstellen Sie eine Python3-Umgebung unter CentOS7
[Memo] Tweet auf Twitter mit Python
Führen Sie Python regelmäßig auf Heroku Scheduler aus
[Python] Ein Memo häufig verwendeter Phrasen in Python-Skripten
Einfach! Implementieren Sie einen Twitter-Bot, der auf Heroku in Python ausgeführt wird
Hinweise zur Verwendung der Tab-Vervollständigung beim interaktiven Ausführen von Python unter Windows
Ich habe viel recherchiert, wie Python ausgeführt wird
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Alles vom Erstellen einer Python-Umgebung bis zur Ausführung unter Windows
Migrieren Sie Django-Anwendungen, die unter Python 2.7 ausgeführt werden, auf Python 3.5
Python-Memo
[Lernnotiz] Grundlagen des Unterrichts mit Python
Ein grobes Verständnis von Python-Feuer und ein Memo
Erstellen Sie eine Python-Umgebung unter MacOS (Catallina)
Zeigen Sie eine Liste der Alphabete in Python 3 an
Python-Memo
Erstellen Sie eine Python-Umgebung auf Ihrem Mac
Ein Hinweis, wenn Sie systemd verwenden, um CentOS 7 dazu zu bringen, immer Python-Skripte auszuführen, denen nicht besonders bewusst war, dass sie als Daemon ausgeführt werden
Erstellen Sie ein Beziehungsdiagramm von Python-Modulen
Effektives Python-Memo Element 4 Schreiben Sie eine Hilfsfunktion anstelle eines komplizierten Ausdrucks
Python-Memo
Kartenmietinformationen auf einer Karte mit Python
Erstellen Sie einen CGI-Server, der unter Python 3 in Docker ausgeführt wird
Verbinde viel Python oder und und