Ceci est une continuation de l'article précédent "Django Heroku Deploy 1". https://qiita.com/yusuke_mrmt/items/1a3ee727d119617b2d85
Maintenant que nous avons sécurisé la zone pour déployer l'application, nous allons la déployer.
Avant le déploiement, vous devez définir les éléments suivants.
Ce sera ce qui précède. Mettre en ordre.
Ajoutez les deux fichiers suivants directement sous le répertoire du projet.
■ Création de runtime.txt
runtime.txt est un fichier qui spécifie la version de Python utilisée par Heroku.
Enregistrez-le directement dans le répertoire du projet (le même répertoire que manage.py) avec le contenu suivant.
runtime.txt
python-3.7.3
web: gunicorn config.wsgi --log-file -
J'exécute une commande appelée gunicorn. gunicorn est un serveur d'applications Python.
Installez-le pour pouvoir exécuter gunicorn, que vous avez mentionné plus tôt dans votre Procfile comme commande à exécuter sur Heroku.
$ pipenv install gunicorn
Installez une bibliothèque appelée django-heroku qui simplifie le processus d'application des paramètres Django à Heroku.
$ pipenv install django-heroku
Configurez la base de données pour l'environnement de production. Définissez DATABASES dans config / settings.py comme suit.
settings.py
...#réduction
# 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'),
}
}
#Postscript
import dj_database_url
db_from_env = dj_database_url.config()
DATABASES['default'].update(db_from_env)
...#réduction
Importez les paramètres de base de données pour Heroku avec dj_database_url </ code> et
Écraser les bases de données.
Django restreint les hôtes par une liste blanche. Définissez le nom de l'application (celui avec les paramètres uniques en premier) dans ALLOWED_HOSTS dans config / settings.py.
settings.py
ALLOWED_HOSTS = ["<Nom de l'application Heroku>.herokuapp.com"]
Si vous ne le définissez pas, les fonctionnalités de sécurité de Django vous empêcheront d'accéder à votre application. ↓ ↓ Exemple
settings.py
ALLOWED_HOSTS = ["banban-2020.herokuapp.com"]
Parce que je reste bloqué dans les paramètres de fichier statique lors du déploiement Ajoutons les paramètres dans le fichier statique de config / settings.py comme suit.
settings.py
...#réduction
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') #Postscript
STATIC_URL = '/static/'
#Postscript
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
...#réduction
Créez ensuite un répertoire statique dans le répertoire racine de votre projet
Créez-y un fichier vide avec le nom .gitkeep </ code>.
・ ・ ・
[Supplément] Raisons de l'ajout de .gitkeep </ code>
Pour livrer des fichiers statiques avec Heroku
Je dois créer un répertoire statique,
Puisqu'un répertoire vide ne peut pas être géré par git, nous créons un fichier vide appelé .gitkeep.
Il n'a pas besoin d'être nommé .gitkeep,
Si vous voulez gérer un tel répertoire vide avec git,
Il semble qu'il soit habituel de le nommer .gitkeep.
Enfin, les contenus définis jusqu'à présent sont séparés entre l'environnement de développement et l'environnement de production. Ajoutez ce qui suit à la fin de config / settings.py.
settings.py
...
...
...#réduction
DEBUG = False
try:
from config.local_settings import *
except ImportError:
pass
if not DEBUG:
import django_heroku
django_heroku.settings(locals())
Dans django_heroku.settings (locals ()), django_heroku appliquera les paramètres pour Heroku.
Ensuite, créez un fichier de configuration pour l'environnement de développement qui ne sera pas déployé sur Heroku. Créez config / local_settings.py et enregistrez-le avec le contenu suivant.
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
Créez ensuite un fichier .gitignore directement sous le projet (le même répertoire que manage.py) et créez-le avec le contenu suivant.
.gitignore
staticfiles
config/local_settings.py
db.sqlite3
.gitignore est un fichier qui déclare les fichiers qui ne sont pas gérés par git. Le fichier config / local_settings.py décrit ici ne sera pas transmis à Heroku. En d'autres termes, il s'agit d'un paramètre pour l'environnement de développement qui ne se reflète pas dans l'environnement de production.
C'est la fin de la modification jusqu'au déploiement.
Vous pouvez déployer en poussant avec git comme la commande suivante dans le terminal.
.gitignore
$ git add .
$ git commit -m "initial commit"
$ git push heroku master
↓ ↓ Entrez le $ git push heroku master </ code> ci-dessus et si cela fonctionne, ce sera comme suit.
.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
Ensuite, effectuez la migration avec la commande suivante dans le terminal. La commande pipenv run python manage.py migrate qui a été effectuée dans l'environnement local L'image est que cela se fera même dans un environnement de production.
.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
Lorsque vous avez terminé, accédez à https: // Heroku appname.com/appname/
! !!
Le déploiement est terminé.
3, Erreur lors de l'installation de django-heroku </ b>
Entrez $ pipenv install django-heroku </ code> dans le terminal ...
J'ai une très longue déclaration d'erreur.
Il y avait la phrase suivante à la fin de la phrase d'erreur.
.gitignore
ERROR: ERROR: Package installation failed...
☤ ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/1 —
J'ai entré la commande suivante dans le terminal.
xcode-select --install
env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pipenv install psycopg2
Erreur lors du déploiement d'Heroku </ b>
Lorsque j'entre $ git push heroku master </ code> dans le terminal, l'erreur suivante se produit.
$ 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'.
Il a été résolu en générant requirements.txt. Lorsque j'ai entré la commande suivante dans le terminal et que j'ai poussé à nouveau vers Heroku, cela s'est passé sans problème.
pipenv lock -r > requirements.txt
c'est tout.
Recommended Posts