Aufgrund verschiedener Besorgungen habe ich beschlossen, die lokal erstellte Django-App für Heroku bereitzustellen, aber ... es hat lange gedauert, also als Memorandum.
(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
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.
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
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)
DjangoApp/ ├ env/ (virtualenv) ├ manage.py ├ db.sqlite3 ├ Django App / (die von Anfang an) │ ├ wsgi.py │ └ setting.py └ App / (Antragsstelle)
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
DjangoApp/ ├ env/ ├ manage.py ├ db.sqlite3 ├ DjangoApp/ │ ├ wsgi.py │ └ setting.py ├ App/ └ .gitignore (New)
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.
DjangoApp/ ├ env/ ├ manage.py ├ db.sqlite3 ├ DjangoApp/ │ ├ wsgi.py │ └ setting.py ├ App/ ├ requirements.txt (New) ├ runtime.txt (New) ├ Procfile (New) └ .gitignore
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! !!
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
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()
.
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)
DjangoApp/ ├ env/ ├ manage.py ├ db.sqlite3 ├ DjangoApp/ │ ├ wsgi.py (modified) │ └ setting.py (modified) ├ App/ ├ requirements.txt ├ runtime.txt ├ Procfile └ .gitignore
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
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!
Sicher in Heroku eingesetzt ... dachte ich, aber die Verwaltungsseite ...
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