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.
Python wird lokal ausgeführt Es gibt auch virtualenv
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)
https://www.heroku.com/
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]
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.
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.
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
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.
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.
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.
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
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
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.
Dies ist das Ende des Tutorials. Schließlich werden als nächster Schritt zwei Links bereitgestellt.
Recommended Posts