[PYTHON] Heroku-Bereitstellung der ersten Django-App, von der Anfänger abhängig sind

Aufgrund verschiedener Besorgungen habe ich beschlossen, die lokal erstellte Django-App für Heroku bereitzustellen, aber ... es hat lange gedauert, also als Memorandum.

Umgebung

Was ist Django?

(Ich denke, Sie wissen es, wenn Sie diesen Artikel lesen ...) Django scheint ein Webframework zu sein, das auf Python2 und 3 läuft ... Es ist "wahrscheinlich", weil ich mit Web-Frameworks nicht vertraut bin. Bei Interesse lesen Sie bitte das offizielle Dokument ...?

Referenz: Django-Dokument

Was ist Bereitstellung?

Verschieben Sie das, was in der lokalen Umgebung gemacht wurde, in die tatsächliche Produktionsumgebung ... Vielleicht. Web-Apps wie Django waren nicht so einfach wie das Hochladen einer Website ... Hier ist der allgemeine Ablauf dieser Bereitstellung.

Voraussetzungen

Wenn Sie Django noch nicht gelernt haben, gab es hier einen schönen Artikel, also lernen Sie von hier ...! Erklärung der Python-Webanwendung (Django) auf leicht verständliche Weise, auch für Anfänger Meister Django am schnellsten

Bereitstellen

Der Autor, der die erste Webanwendung mit Django erstellt hat. Es ist schleimig, es bewegt sich, es bewegt sich DB, es bewegt sich Eines Tages, eines Tages ist es endlich Zeit, es online zu bewegen ... (Story-Stil)

Ausgangssituation

DjangoApp/  ├ env/ (virtualenv)  ├ manage.py  ├ db.sqlite3 ├ Django App / (die von Anfang an)  │ ├ wsgi.py  │ └ setting.py └ App / (Antragsstelle)

Vorabend des Einsatzes

Nachdem er untersucht hatte, was für die Bereitstellung erforderlich ist, sagte er: "Fügen Sie db.sqlite3 (SQLite-Datenbankkörper), * .pyc und env / und darunter in .gitignore ein." Ich habe .gitignore gehorsam gemacht, den Cache mit "git rm -r --cached" gelöscht und festgeschrieben

Referenz: Reflect the settings of [Qiita] .gitignore

Die Situation nach der Nacht zuvor

DjangoApp/  ├ env/  ├ manage.py  ├ db.sqlite3  ├ DjangoApp/  │ ├ wsgi.py  │ └ setting.py  ├ App/  └ .gitignore (New)

Bereit zur Bereitstellung

Beim Hochladen einer Datei nach Heroku scheinen drei Arten von heiligen Schätzen erforderlich zu sein: "Procfile (ohne Erweiterung)", "require.txt" und "runtime.txt".

Procfile Es sagt Heroku, dass "Diese App sollte so gestartet werden! ☆" Vorerst habe ich beschlossen, es genau so zu schreiben, wie es von verschiedenen Leuten geschrieben wurde.

Procfile


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

Der Django App-Teil beschreibt Ihren Anwendungsnamen. Und es scheint, dass ich dieses "Gunicorn" und so weiter später in virtualenv installieren muss ... Mmm, es kostet viel Zeit und Mühe ...

requirements.txt Sie müssen Heroku mit den Modulen kontaktieren, die zum Ausführen dieser Anwendung erforderlich sind. Dafür wird Requirements.txt verwendet. (vielleicht) Das ist einfach. Nach dem Start von virtualenv mit einem Befehl

CMD


pip freeze > requirements.txt 

Und es ist ausreichend. Sie sollten eine Datei wie die folgende haben.

requirements.txt


Django==1.11.1
virtualenv==15.1.0

runtime.txt Es scheint Heroku die Version von Python zu sagen, die Sie gerade verwenden ... (Ich bin nicht sicher)

CMD


python-2.7.x

Der Teil 2.7.x basiert auf der auf Ihrem Computer installierten Python-Version.

Nach der Schaffung von drei Arten von heiligen Schätzen

DjangoApp/  ├ env/  ├ manage.py  ├ db.sqlite3  ├ DjangoApp/  │ ├ wsgi.py  │ └ setting.py  ├ App/  ├ requirements.txt (New)  ├ runtime.txt (New)  ├ Procfile (New)  └ .gitignore

Django-Toolbelt Installation

Nach der Untersuchung scheinen verschiedene zusätzliche Module für die Bereitstellung erforderlich zu sein ... Das obige Gunicorn, djando-static für den Umgang mit statischen Dateien, dj_database_url für den Umgang mit Datenbanken usw. Ich denke, es ist mühsam, jedes einzelne zu handhaben. Als ich dort war, fand ich einen Verbündeten, der diese zusammenstellen konnte! Django-Werkzeuggürtel ...!

CMD


pip install django-toolbelt

Installieren Sie den Werkzeuggürtel als. Ich habe alle notwendigen Module ...!

...... Wenn Sie ein weiser Mensch sind, sollten Sie "diesen Kerl (lacht)" bemerken ... Ja, das Modul, das zu diesem Zeitpunkt vom Toolbelt installiert wurde, ist nicht in der Datei "resources.txt" geschrieben ... Ich habe dies nicht bemerkt und es dauerte mehr als einen halben Tag Auch Zeit verbracht ... Richtig, lassen Sie uns zu diesem Zeitpunkt erneut Pip Freeze durchführen und die Dateianforderungen.txt aktualisieren! !!

require.txt nach der Installation des Werkzeuggürtels

requirements.txt


dj-database-url==0.4.2
dj-static==0.0.6
Django==1.11.1
django-toolbelt==0.0.1
gunicorn==19.7.1
psycopg2==2.7.3
pytz==2017.2
static3==0.7.0
virtualenv==15.1.0

Es geht immer noch weiter! Bereit zur Bereitstellung!

Als nächstes folgt die Geschichte rund um die Datenbank.

Ich habe gehört, dass Heroku die sqlite3-Datenbank nicht verwenden kann (ich frage mich, ob sie installiert werden kann ...?) Daher ist es notwendig, die (?) Postgres zu verwenden, die standardmäßig mit Heroku ...

…… Und die DJ-Datenbank-URL dafür! Öffnen Sie settings.py und suchen Sie den folgenden Teil.

setting.py


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

Schreiben Sie die Beschreibung dieser Datenbank wie folgt um

setting.py


if "COMPUTER-NAME" in hostname:
    #Debug-Umgebung
    # DEBUG = True //Ich habe hier auch den Debug-Modus umgeschaltet
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    ALLOWED_HOSTS = [] #Ich bin mir nicht sicher, aber das scheint auch wichtig zu sein
else:
    #Produktionsumfeld
    # DEBUG = False
    import dj_database_url
    db_from_env = dj_database_url.config()
    DATABASES = {
        'default': dj_database_url.config()
    }
    ALLOWED_HOSTS = ['*']

Dies verwendet sqlite3 in der lokalen Umgebung und Postgres in der Heroku-Umgebung. (Wahrscheinlich) COMPUTER-NAME ist der Name Ihres Geräts. (Ich habe gesehen, dass ich lokal schreiben sollte, aber es hat in meiner Umgebung nicht funktioniert ...) Wenn Sie (mit ziemlicher Sicherheit) wütend auf "Sie haben keinen Hostnamen, Sie sind dumm!" Werden, fügen Sie am Anfang von settings.py Folgendes hinzu.

setting.py


.
from socket import gethostname
hostname = gethostname()
.

Ich verstehe wsgi nicht wirklich

Es ist Zeit, wsgi.py zu berühren, was ich in der lokalen Umgebung nicht berührt habe ...! Ich denke, es ist okay, nur ein bisschen wie folgt damit zu spielen

setting.py


import os
from dj_static import Cling
from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoApp.settings")
application = Cling(get_wsgi_application())

Die Django App hat einen eigenen Projektnamen. …… Immerhin, was war wsgi.py (Solegawa Karanai)

Endgültige Situation

DjangoApp/  ├ env/  ├ manage.py  ├ db.sqlite3  ├ DjangoApp/  │ ├ wsgi.py (modified)  │ └ setting.py (modified)  ├ App/  ├ requirements.txt  ├ runtime.txt  ├ Procfile  └ .gitignore

Jetzt bereitstellen! Ziel für Heroku!

Jetzt, da wir bereit sind, starten Sie CMD und gehen Sie zu Heroku!

CMD


git add .
git commit -am "Launching now!"

heroku login
> Enter your Heroku credentials.
> Email: [email protected]
> Password (hidden):
> Logged in as [email protected]

heroku create NAME
> https://NAME.herokuapp.com/ | https://git.heroku.com/NAME.git

git push heroku master
>Etwas Langes

heroku run python manage.py migrate
>Der übliche Migrationsbefehl fließt

heroku open

Das letzte Heroku-Öffnen öffnet die Anwendung. (In meinem Fall war es der erste Anwendungsfehler ...) Das ist es! Der Rest ist Betrieb! !! Danke für deine harte Arbeit! !! !! (müde

Impressionen

Es ist auch möglich, einen Eindruck darüber zu schreiben, aber es war für Anfänger so schwierig zu denken: "Was für ein Umweg ... Kannst du es nicht schlauer machen?" ... (´; ω; `) Insbesondere gibt es nur wenige Referenzen für die neueste Version (Version 1.11) ... Immerhin habe ich das offizielle englische Dokument gelesen (lacht). Verbreite den Kreis von Django!

Ungelöste Fehler

Management-Site brechen

Sicher in Heroku eingesetzt ... dachte ich, aber die Verwaltungsseite ...

無題.png

Es ist kaputt ... (´ ・ ω ・ `) Aus irgendeinem Grund liest es kein CSS ... Ich habe der Datei settings.py Folgendes hinzugefügt, um statische Dateien zu verarbeiten, aber ... nein ...!

setting.py


STATIC_URL = '/static/'

# Static asset configuration
STATIC_ROOT = 'staticfiles'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

...... Nun, ich werde es geduldig beheben!

Recommended Posts

Heroku-Bereitstellung der ersten Django-App, von der Anfänger abhängig sind
Die Geschichte, dass die Version von Python 3.7.7 nicht an Heroku angepasst wurde
Eine kleine süchtig machende Geschichte mit den Berechtigungen des von expdp angegebenen Verzeichnisses (für Anfänger)
Passen Sie das Modell frei an. Ändern Sie den Variablennamen und den Feldnamen des Modells der Django / Django Rest Framework-App. ~ So spiegeln Sie die Bereitstellung in heroku Memo wider
So überprüfen Sie die Version von Django
Stellen Sie die Django-App in Heroku bereit [Teil 2]
Stellen Sie die Django-App in Heroku bereit [Teil 1]
10 Python-Fehler, die Anfängern häufig sind
Die erste Web-App, die von Python-Anfängern erstellt wurde
Exklusive Veröffentlichung der Django App mit ngrok
Liste der Links, die Anfänger des maschinellen Lernens lernen
Ich möchte eine Django-App auf Heroku hochladen
[Ansible] Beispiel für ein Playbook, das der ersten Zeile der Datei eine Zeichenkette hinzufügt
[Django] Lassen Sie uns versuchen, den Teil von Django zu klären, der im Test irgendwie durch war
Als ich die Django-App für Heroku bereitgestellt habe, wurde das Modul nicht gefunden: <Projektname> .wsgi.
Die Wand beim Ändern des Django-Dienstes von Python 2.7 auf Python 3-Serie
Memo zur Bereitstellung von Django × Postgresql auf Docker für Heroku
Verschiedene Hinweise zur Bereitstellung der Django-App auf Heroku
Heroku-Einsatznotiz (Django)
Zusammenfassung der Stolperpunkte in Django zum ersten Mal
Schließen Sie den ersten Import des Moduls an und drucken Sie den Modulpfad
Versuchen Sie, die in COTOHA beliebten Schlüsselwörter zu extrahieren
[Django] Eine Sammlung von Skripten, die für die Entwicklung geeignet sind
[Django] Eine einfache Zusammenfassung der Protokollausgabefunktion, damit auch Anfänger sie verstehen können.
Die Geschichte, zum ersten Mal seit 5 Jahren wieder an die Front zurückzukehren und Python Django umzugestalten
[Erste persönliche Entwicklung] Die Geschichte der Bereitstellung der Flask-App und des automatischen Antwort-Bot von Twitter auf Heroku
Die Geschichte, dass CSS nicht mehr angewendet wird, wenn die Django-App von lokal auf AWS hochgeladen wird
Stellen Sie das Django-Projekt für Heroku bereit
Die Platte, von der ich süchtig war, als ich MeCab in Heroku einsetzte
Extrahieren Sie den Index der ursprünglichen Mengenliste, der der Liste der Teilmengen entspricht.
[Python] So erhalten Sie den ersten und den letzten Tag des Monats
Erste Python ② Versuchen Sie, Code zu schreiben, während Sie die Funktionen von Python untersuchen
Die erste künstliche Intelligenz. So überprüfen Sie die installierte Version von Tensorflow.
So stellen Sie eine Django-App in nur 5 Minuten für Heroku bereit
Erstellen Sie eine App, die LINE jeden Morgen über das Wetter informiert
Ein Skript, das 0, 1 an die erste Python-Primzahl zurückgibt
Überprüfung der Theorie, dass "Python und Swift ziemlich ähnlich sind"
Python-Anfänger nutzen die inoffizielle API von Google Play Music, um Musik abzuspielen
[Python] Ein Hinweis, dass ich das Verhalten von matplotlib.pyplot zu verstehen begann
[Python] Ein Programm, das den Inhalt der Liste nach links dreht
Die Geschichte, dass "calendar.day_abbr" auf dem Admin-Bildschirm von django nicht aktualisiert werden konnte
[Für Anfänger] Ich möchte den Index eines Elements erhalten, das einen bestimmten bedingten Ausdruck erfüllt
(Python) Ich habe eine App von Trello erstellt, die regelmäßig über das Auslaufen von Aufgaben informiert, die bald ablaufen.
Django super Einführung von Python-Anfängern! Teil 2 Ich habe versucht, die praktischen Funktionen der Vorlage zu nutzen
[AtCoder für Anfänger] Sprechen Sie über den Rechenaufwand, den Sie grob wissen möchten
Gründe zu der Annahme, dass die griechischen Zeichen in der Formel so wie sie sind als Variablennamen verwendet werden sollten
Zusammenfassung der Websites und Lernverfahren, die für diejenigen hilfreich sind, die zum ersten Mal versuchen, Spiele mit Pygame zu erstellen