Dies ist eine Fortsetzung des vorherigen Artikels "Django Heroku Deploy 1". https://qiita.com/yusuke_mrmt/items/1a3ee727d119617b2d85
Nachdem wir den Bereich für die Bereitstellung der App gesichert haben, werden wir sie tatsächlich bereitstellen.
Vor der Bereitstellung müssen Sie die folgenden Elemente festlegen.
Es wird das oben genannte sein. In Ordnung bringen.
Fügen Sie die folgenden zwei Dateien direkt unter dem Projektverzeichnis hinzu.
■ Erstellen von runtime.txt
runtime.txt ist eine Datei, die die von Heroku verwendete Python-Version angibt.
Speichern Sie es direkt unter dem Projektverzeichnis (dasselbe Verzeichnis wie manage.py) mit den folgenden Inhalten.
runtime.txt
python-3.7.3
web: gunicorn config.wsgi --log-file -
Ich führe einen Befehl namens Gunicorn aus. gunicorn ist ein Python-Anwendungsserver.
Installieren Sie es, damit Sie Gunicorn ausführen können, das Sie zuvor in Ihrem Procfile als Befehl zum Ausführen auf Heroku erwähnt haben.
$ pipenv install gunicorn
Installieren Sie eine Bibliothek namens django-heroku, die das Anwenden der Django-Einstellungen auf Heroku vereinfacht.
$ pipenv install django-heroku
Richten Sie die Datenbank für die Produktionsumgebung ein. Stellen Sie DATABASES in config / settings.py wie folgt ein.
settings.py
...#Kürzung
# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
#Nachtrag
import dj_database_url
db_from_env = dj_database_url.config()
DATABASES['default'].update(db_from_env)
...#Kürzung
Importieren Sie die Datenbankeinstellungen für Heroku mit dj_database_url </ code> und
DATENBANKEN überschreiben.
Django verwendet eine Whitelist-Methode, um Hosts einzuschränken. Setzen Sie ALLOWED_HOSTS in config / settings.py auf den App-Namen (den mit der ersten eindeutigen Einstellung).
settings.py
ALLOWED_HOSTS = ["<Heroku App Name>.herokuapp.com"]
Wenn Sie dies nicht einstellen, verhindern die Sicherheitsfunktionen von Django, dass Sie auf Ihre App zugreifen können. ↓ ↓ Beispiel
settings.py
ALLOWED_HOSTS = ["banban-2020.herokuapp.com"]
Weil ich bei der Bereitstellung in den statischen Dateieinstellungen stecken bleibe Fügen wir die Einstellungen in der statischen Datei von config / settings.py wie folgt hinzu.
settings.py
...#Kürzung
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') #Nachtrag
STATIC_URL = '/static/'
#Nachtrag
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
...#Kürzung
Erstellen Sie dann ein statisches Verzeichnis im Stammverzeichnis Ihres Projekts
Erstellen Sie eine leere Datei mit dem Namen .gitkeep </ code>.
・ ・ ・
[Ergänzung] Gründe für das Hinzufügen von .gitkeep </ code>
Statische Dateien mit Heroku liefern
Ich muss ein statisches Verzeichnis erstellen,
Da ein leeres Verzeichnis nicht von git verwaltet werden kann, erstellen wir eine leere Datei mit dem Namen .gitkeep.
Es muss nicht .gitkeep heißen,
Wenn Sie ein solches leeres Verzeichnis mit git verwalten möchten,
Es scheint üblich zu sein, es .gitkeep zu nennen.
Schließlich werden die bisher festgelegten Inhalte zwischen der Entwicklungsumgebung und der Produktionsumgebung getrennt. Fügen Sie am Ende von config / settings.py Folgendes hinzu.
settings.py
...
...
...#Kürzung
DEBUG = False
try:
from config.local_settings import *
except ImportError:
pass
if not DEBUG:
import django_heroku
django_heroku.settings(locals())
In django_heroku.settings (local ()) wendet django_heroku die Einstellungen für Heroku an.
Erstellen Sie als Nächstes eine Konfigurationsdatei für die Entwicklungsumgebung, die nicht in Heroku bereitgestellt wird. Erstellen Sie config / local_settings.py und speichern Sie es mit den folgenden Inhalten.
local_settings.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
ALLOWED_HOSTS = []
DEBUG = True
Erstellen Sie dann eine Gitignore-Datei direkt unter dem Projekt (dasselbe Verzeichnis wie manage.py) und erstellen Sie sie mit den folgenden Inhalten.
.gitignore
staticfiles
config/local_settings.py
db.sqlite3
.gitignore ist eine Datei, die Dateien deklariert, die nicht von git verwaltet werden. Die hier beschriebene Datei config / local_settings.py wird nicht an Heroku übertragen. Mit anderen Worten, es ist eine Einstellung für die Entwicklungsumgebung, die sich nicht in der Produktionsumgebung widerspiegelt.
Dies ist das Ende der Änderung bis zur Bereitstellung.
Sie können bereitstellen, indem Sie mit git wie im folgenden Befehl im Terminal drücken.
.gitignore
$ git add .
$ git commit -m "initial commit"
$ git push heroku master
↓ ↓ Geben Sie den obigen $ git push heroku master </ code> ein. Wenn dies funktioniert, sieht es wie folgt aus.
.gitignore
$ git push heroku master
Total 0 (delta 0), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Python app detected
remote: -----> Installing python-3.7.3
remote: -----> Installing pip
remote: -----> Installing dependencies with Pipenv 2018.5.18…
remote: Installing dependencies from Pipfile.lock (8f0d8d)…
remote: -----> Installing SQLite3
remote: -----> $ python manage.py collectstatic --noinput
remote: 120 static files copied to '/tmp/build_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/staticfiles'.
remote:
remote: -----> Discovering process types
remote: Procfile declares types -> (none)
remote:
remote: -----> Compressing...
remote: Done: 64.9M
remote: -----> Launching...
remote: Released v1
remote: https://banban-2020.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/banban-2020.git
* [new branch] master -> master
Führen Sie als Nächstes die Migration mit dem folgenden Befehl im Terminal durch. Der Befehl pipenv run python manage.py migrate wurde in der lokalen Umgebung ausgeführt Das Bild ist, dass es auch in einer Produktionsumgebung gemacht wird.
.gitignore
$ heroku run python manage.py migrate
Running python manage.py migrate on ⬢ banban-2020... up, run.8064 (Free)
Operations to perform:
Apply all migrations: admin, auth, contenttypes, banban, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying banban.0001_initial... OK
Applying banban.0002_card... OK
Applying sessions.0001_initial... OK
Wenn Sie fertig sind, gehen Sie zu https: // Heroku appname.com/appname/ </ code>! !!
Die Bereitstellung ist abgeschlossen.
3, Fehler bei der Installation von django-heroku </ b>
Geben Sie $ pipenv install django-heroku </ code> in das Terminal ein ...
Ich habe eine sehr lange Fehlererklärung erhalten.
Am Ende des Fehlersatzes stand der folgende Satz.
.gitignore
ERROR: ERROR: Package installation failed...
☤ ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/1 —
Ich habe den folgenden Befehl im Terminal eingegeben.
xcode-select --install
env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pipenv install psycopg2
Fehler beim Bereitstellen von Heroku </ b>
Wenn ich $ git push heroku master </ code> in das Terminal eingebe, tritt der folgende Fehler auf.
$ git push heroku master
Enumerating objects: 93, done.
Counting objects: 100% (93/93), done.
Delta compression using up to 8 threads
Compressing objects: 100% (82/82), done.
Writing objects: 100% (93/93), 21.51 KiB | 2.39 MiB/s, done.
Total 93 (delta 33), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: ! No default language could be detected for this app.
remote: HINT: This occurs when Heroku cannot detect the buildpack to use for this application automatically.
remote: See https://devcenter.heroku.com/articles/buildpacks
remote:
remote: ! Push failed
remote: Verifying deploy...
remote:
remote: ! Push rejected to banban-2020.
remote:
To https://git.heroku.com/banban-2020.git
![remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/banban-2020.git'
muramatsuyuusukenoMacBook-Pro:banban muramatsuyuusuke$ git add .
muramatsuyuusukenoMacBook-Pro:banban muramatsuyuusuke$ git commit -m "initial"
On branch master
Your branch is up to date with 'origin/master'.
Es wurde durch Generieren von require.txt gelöst. Als ich den folgenden Befehl im Terminal eingab und erneut zu Heroku drückte, verlief er ohne Probleme.
pipenv lock -r > requirements.txt
das ist alles.
Recommended Posts