En raison de diverses courses, j'ai décidé de déployer l'application Django fabriquée localement sur Heroku, mais cela a pris beaucoup de temps, donc sous forme de mémorandum.
(Je pense que vous le savez quand vous lisez cet article ...) Django semble être un framework web qui tourne sur Python2 et 3 ... C'est "probable" parce que je ne suis pas familier avec les frameworks Web. Si vous êtes intéressé, veuillez vous référer au document officiel ...?
Référence: Document Django
Transférer ce qui a été fait dans l'environnement local vers l'environnement de production réel ... Peut-être. Les applications Web comme Django n'étaient pas aussi faciles que de simplement télécharger un site Web ... Ci-dessous, je vais vous expliquer le déroulement général de ce déploiement.
Si vous n'avez pas encore appris Django, il y avait un bel article ici, alors apprenez d'ici ...! Explication de l'application Web Python (Django) d'une manière facile à comprendre même pour les débutants Master Django le plus rapide
L'auteur qui a créé la première application Web utilisant Django. C'est gluant, ça bouge, c'est DB, ça bouge Un jour, un jour, il est enfin temps de le mettre en ligne ... (style histoire)
DjangoApp/ ├ env/ (virtualenv) ├ manage.py ├ db.sqlite3 ├ Django App / (celle du début) │ ├ wsgi.py │ └ setting.py └ App / (corps de l'application)
Après avoir étudié ce qui est nécessaire pour le déploiement, il a dit: "Mettez db.sqlite3 (corps de la base de données sqlite), * .pyc et env / et ci-dessous dans .gitignore." J'ai fait .gitignore docilement, supprimé le cache avec "git rm -r --cached." Et validé
Référence: Refléter les paramètres de [Qiita] .gitignore
DjangoApp/ ├ env/ ├ manage.py ├ db.sqlite3 ├ DjangoApp/ │ ├ wsgi.py │ └ setting.py ├ App/ └ .gitignore (New)
Lors du téléchargement d'un fichier sur Heroku, il semble que trois types de trésors sacrés, "Procfile (sans extension)", "requirements.txt" et "runtime.txt" sont nécessaires.
Procfile Il dit à Heroku que "Cette application devrait être lancée comme ça! ☆" Pour le moment, j'ai décidé de l'écrire exactement comme il a été écrit par diverses personnes.
Procfile
web: gunicorn DjangoApp.wsgi --log-file -
La partie Django App décrit le nom de votre application. Et il semble que je doive installer ce "gunicorn" et ainsi de suite dans virtualenv plus tard ... Mmm, cela prend beaucoup de temps et d'efforts ...
requirements.txt Vous devez contacter Heroku avec les modules nécessaires pour exécuter cette application. Requirements.txt est utilisé pour cela. (peut être) C'est facile. Après avoir démarré virtualenv avec une commande
CMD
pip freeze > requirements.txt
Et c'est suffisant. Vous devriez avoir un fichier comme celui ci-dessous.
requirements.txt
Django==1.11.1
virtualenv==15.1.0
runtime.txt Il semble indiquer à Heroku la version de python que vous utilisez maintenant ... (je ne suis pas sûr)
CMD
python-2.7.x
La partie 2.7.x est basée sur la version de Python installée sur votre ordinateur.
DjangoApp/ ├ env/ ├ manage.py ├ db.sqlite3 ├ DjangoApp/ │ ├ wsgi.py │ └ setting.py ├ App/ ├ requirements.txt (New) ├ runtime.txt (New) ├ Procfile (New) └ .gitignore
Après enquête, il semble que divers modules supplémentaires soient nécessaires pour le déploiement ... Le gunicorn ci-dessus, djando-static pour la gestion des fichiers statiques, dj_database_url pour la gestion des bases de données, etc ... Je pense qu'il est difficile de gérer chacun d'eux. Quand j'étais là-bas, j'ai trouvé un allié qui pourrait les mettre ensemble! django-toolbelt ...!
CMD
pip install django-toolbelt
Installez la ceinture porte-outils comme. J'ai tous les modules nécessaires ...!
...... Si vous êtes une personne sage, vous devriez remarquer "ce type (rires)" ... Oui, le module installé par toolbelt à ce moment n'est pas écrit dans requirements.txt ... Je n'ai pas remarqué cela et cela a pris plus d'une demi-journée Également passé du temps ... Correctement, faisons à nouveau pip freeze à ce moment et mettons à jour requirements.txt! !!
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
J'ai entendu dire que Heroku ne pouvait pas utiliser la base de données sqlite3 (je me demande si elle peut être installée ...?) Par conséquent, il est nécessaire d'utiliser le (?) Postgres fourni en standard avec Heroku ...
…… Et le dj-database-url pour ça! Ouvrez setting.py et recherchez la partie suivante.
setting.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
Réécrivez la description de ce DB comme suit
setting.py
if "COMPUTER-NAME" in hostname:
#Environnement de débogage
# DEBUG = True //J'ai également changé le mode de débogage ici
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
ALLOWED_HOSTS = [] #Je ne suis pas sûr, mais cela semble aussi important
else:
#Environnement de production
# DEBUG = False
import dj_database_url
db_from_env = dj_database_url.config()
DATABASES = {
'default': dj_database_url.config()
}
ALLOWED_HOSTS = ['*']
Cela utilisera sqlite3 dans l'environnement local et Postgres dans l'environnement Heroku. (Probablement) COMPUTER-NAME est le nom de votre appareil. (J'ai vu que je devais écrire local, mais cela n'a pas fonctionné dans mon environnement ...) De plus, si vous vous mettez (presque certainement) en colère contre "Vous n'avez pas de nom d'hôte, vous êtes stupide!", Ajoutez ce qui suit au début de setting.py.
setting.py
.
from socket import gethostname
hostname = gethostname()
.
Il est temps de toucher wsgi.py, que je n'ai pas touché dans l'environnement local ...! Je pense que c'est bon de jouer avec un peu comme ce qui suit
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())
Django App a son propre nom de projet. …… Après tout, qu'est-ce que wsgi.py (Solegawa Karanai)
DjangoApp/ ├ env/ ├ manage.py ├ db.sqlite3 ├ DjangoApp/ │ ├ wsgi.py (modified) │ └ setting.py (modified) ├ App/ ├ requirements.txt ├ runtime.txt ├ Procfile └ .gitignore
Maintenant que nous sommes prêts, lancez CMD et allez à 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
>Quelque chose de long
heroku run python manage.py migrate
>Les flux de commande habituels de migration
heroku open
Le dernier Heroku ouvert ouvrira l'application. (Dans mon cas, c'était la première erreur d'application ...) C'est tout! Le reste, c'est l'opération! !! Je vous remercie pour votre travail acharné! !! !! (fatigué
Il est également possible d'écrire une impression à ce sujet, mais il était si difficile pour les débutants de penser: "Quel détour ... Vous ne pouvez pas le rendre plus intelligent?" ... (´; ω; `) En particulier, il y a peu de références pour la dernière (ver1.11) ... Après tout, je lisais le document officiel anglais (rires). Écartez-vous, le cercle de Django!
Déployé sur Heroku en toute sécurité ... je pensais, mais le site de gestion ...
Il est cassé ... (´ ・ ω ・ `) Pour une raison quelconque, il ne lit pas le CSS ... J'ai ajouté ce qui suit à setting.py pour gérer les fichiers statiques, mais ... non ...!
setting.py
STATIC_URL = '/static/'
# Static asset configuration
STATIC_ROOT = 'staticfiles'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
...... Eh bien, je vais le réparer patiemment!