Ne perdez pas contre Ruby! Comment exécuter Python (Django) sur Heroku

Comme le titre l'indique, Heroku a une image de Ruby ou Rails. Mais vous pouvez utiliser Python aussi bien que Ruby! Donc, j'aimerais publier un moyen de faire fonctionner Django, le framework Python.

Qu'est-ce que Django?

C'est un framework Web dit full-stack créé par Python, qui contient tout ce dont vous avez besoin pour créer une application Web. Par exemple, en Java

Il est nécessaire de faire diverses combinaisons avec (Est-il possible de faire de mon mieux avec Java EE seul ces jours-ci?), Mais Django ne peut fondamentalement être développé qu'avec Django.

Bien sûr, le codage se fait en Python, il est donc recommandé à ceux qui peuvent utiliser Python ou qui souhaitent étudier Python à partir de maintenant. Demain, kounoike écrira un article sur Flask, un autre framework créé par Python. Vous voudrez peut-être vous y référer également.

Éléments à prendre en compte lors du déploiement de Django sur Heroku

C'est le point auquel j'étais principalement accro. Ici, nous parlerons de l'hypothèse que Heroku est un environnement de production et un environnement de fonctionnement réel.

Version Python

La version par défaut de Python sur heroku est 2.x. Je veux utiliser le système 3.x! Dans ce cas, vous devez dire à heroku à cet effet.

Mode débogage

Django a un mode de débogage, qui est activé par défaut lorsque vous créez l'environnement. En définissant cette option sur Activé, par exemple, lorsqu'une erreur se produit, le contenu détaillé sera affiché. Voici un exemple d'erreur 404. L'URL actuellement reconnue comme URL est affichée, mais il est gênant qu'elle s'affiche sur la page à utiliser. デバッグ時の404エラー例

Base de données

Django utilise SQLite comme base de données pendant le développement, sauf si vous modifiez les paramètres. Cependant, Postgres est essentiellement disponible sur Heroku. Par conséquent, il est également nécessaire de modifier les paramètres de la base de données.

Serveur d'applications

En tant que framework full stack, Django lui-même a une fonction de serveur d'application. Cependant, il est positionné pour le développement uniquement, et il est recommandé d'utiliser un serveur d'applications dédié et parfaitement réglé pour le fonctionnement réel.

Gestion des fichiers statiques

Le serveur d'applications est essentiellement un serveur pour exécuter des applications, je ne suis donc pas doué pour gérer les fichiers statiques. Je pense que les serveurs d'applications dans d'autres langues auront également Apache ou nginx pour gérer les fichiers statiques. Ce point doit également être pris en compte.

Solution

Je bouge comme ça! Donc, si vous avez des questions telles que "Vous devriez faire ceci!", N'hésitez pas à nous contacter.

Version Python

C'est facile. Préparez simplement un fichier appelé runtime.txt dans le dossier actuel du projet et spécifiez la version Python comme suit.

runtime.txt


python-3.4.1

runtime.txt Veuillez noter que les versions disponibles sont fixes, veuillez donc vous référer à la page suivante pour sélectionner la version à utiliser. Specifying a Python Runtime

Mode débogage

Les paramètres du mode de débogage sont spécifiés dans settings.py. Cependant, il est difficile de le changer en poussant vers heroku et de le remettre en place lors du développement local. Donc, dans mon cas, comme indiqué ci-dessous, j'essaie d'entrer en mode débogage uniquement lorsque local est inclus dans le nom d'hôte (nom de la machine). C'est parce que mon environnement de développement a un nom tel que "hogehoge.local", donc changez la partie locale en fonction du nom d'hôte que vous utilisez (à l'inverse, spécifiez le nom de la machine du côté heroku) Y a-t-il)

settings.py



if 'local' in hostname:
    DEBUG = True
    TEMPLATE_DEBUG = True
else:
    DEBUG = False
    TEMPLATE_DEBUG = False
    ALLOWED_HOSTS = ['*']

Base de données

Cela sera également spécifié dans settings.py, mais je ne veux pas le réécrire en fonction de l'environnement. Par conséquent, je vais faire la description suivante.

settings.py



if 'local' in hostname:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
else:
    import dj_database_url
    DATABASES = {
        'default': dj_database_url.config()
    }

Un point ici est

python



    import dj_database_url
    DATABASES = {
        'default': dj_database_url.config()
    }

Partie de. En utilisant l'API (installable avec pip) appelée dj_database_url, il n'est pas nécessaire de décrire la destination de la connexion, le nom d'utilisateur, le mot de passe, etc. dans le code. C'était un choc.

Serveur d'applications

Le framework d'application Web de Python a un standard appelé WSGI, et tout serveur conforme à ce standard peut être utilisé. Dans le document heroku, il y a une explication utilisant gunicorn, donc je vais monter là-dessus.

Deploying Python Applications with Gunicorn

Pour l'utiliser, installez gunicorn avec pip et ajoutez la description de gunicorn à la fin de INSTALLED_APPS dans settings.py.

settings.py



INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.sites',
    'django.contrib.staticfiles',
    'django.contrib.sitemaps',
    'Nom du projet',
    'gunicorn',   ##← Ajouter cette ligne
)

Et au moment du développement

$ python manage.py runserver 0.0.0.0:8080

Ce qui a été démarré sous la forme de, sera démarré avec gunicorn au lieu de manage.py par la méthode décrite plus loin (décrite dans Procfile).

Gestion des fichiers statiques

J'ai eu du mal à trouver des informations à ce sujet. En conclusion, nous utilisons quelque chose appelé bruit blanc.

Django and Static Assets

Après avoir installé whitenoise avec pip, modifiez settings.py comme décrit dans le lien ci-dessus. Ensuite, préparez un fichier appelé wisgi.py dans le même dossier où se trouve settings.py, et écrivez le contenu suivant qui est également décrit dans le lien.

wsgi.py



from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise

application = get_wsgi_application()
application = DjangoWhiteNoise(application)

Ensuite, écrivez ce qui suit dans le fichier Procfile afin qu'il puisse être démarré en utilisant les paramètres, y compris gunicorn.

Procfile



web: gunicorn --env DJANGO_SETTINGS_MODULE=Nom du projet.settings Nom du projet.wsgi --log-file -

Avec ce paramètre, poussez vers le référentiel d'heroku et cela devrait démarrer!

Et les performances? ??

J'ai publié l'application déployée avec les paramètres ci-dessus l'autre jour, et il y avait environ 20000 PV le premier jour de la sortie, mais cela fonctionnait bien dans la plage du niveau gratuit. Non, heroku est vraiment incroyable.

Vous trouverez ci-dessous un lien vers un blog qui décrit le processus de création de l'application, j'espère donc que vous pourrez également vous y référer.

J'ai essayé de créer un service Web pour résoudre des problèmes sexuels

>> Services en cours d'exécution Love Points

Postscript

Le code source du service réellement exploité (différent de ↑) créé par heroku & Django a été téléchargé sur github.

J'espère que cela sera utile pour la composition etc. (C'est une source sale ...)

https://github.com/nakazye/ProgrammerProfile/

Vient ensuite ...

Demain, le 8 décembre, le calendrier de l'Avent Heroku 2014 concerne le Flacon de kounoike! Je suis ravi que le matériel Python continue.

Et je souhaite que de plus en plus de personnes créent des applications avec Python, inspirées de l'article.

kounoike, j'ai hâte de lire l'article de demain! !!

Recommended Posts

Ne perdez pas contre Ruby! Comment exécuter Python (Django) sur Heroku
Comment exécuter matplotlib sur heroku
Comment exécuter MeCab sur Ubuntu 18.04 LTS Python
Comment exécuter Notepad ++ Python
Comment créer un environnement Django (python) sur Docker
Comment utiliser Django avec Google App Engine / Python
Comment exécuter Django sur IIS sur un serveur Windows
Comment déployer Pybot, le manuel Python le plus simple, sur Heroku
python + django + scikit-learn + mecab (1) avec heroku
python + django + scikit-learn + mecab (2) avec heroku
Exécutez régulièrement Python sur Heroku Scheduler
Comment installer OpenCV sur Cloud9 et l'exécuter en Python
Comment déployer une application Django sur heroku en seulement 5 minutes
Migrer les applications Django exécutées sur Python 2.7 vers Python 3.5
Comment lire pydoc sur l'interpréteur python
Comment effacer Python 2.x sur Mac.
Mémorandum sur l'utilisation du python gremlin
Notes sur la façon d'exécuter Cython sur OSX
Comment écrire Ruby to_s en Python
Comment exécuter des scripts Maya Python
Comment télécharger avec Heroku, Flask, Python, Git (4)
Comment profiter de la programmation avec Minecraft (Ruby, Python)
Mettez MicroPython sur Windows pour exécuter ESP32 sur Python
[Version 2020] Comment installer Python3 sur EC2 d'AWS
Stratégie sur la façon de monétiser avec Python Java
Comment installer OpenCV sur Jetson Nano Python
Comment utiliser Python Kivy ④ ~ Exécution sur Android ~
Comment exécuter LeapMotion avec Python non-Apple
[Python] Comment installer OpenCV sur Anaconda [Windows]
Exécutez Python sur Apache pour afficher les données InfluxDB
Comment exécuter une application Django sur un conteneur Docker (environnement de développement et de production)
Comment installer Python
Exécutez Django sur PythonAnywhere
Comment installer python
[Python] Comment exécuter Jupyter-notebook + pandas + multiprocessing (Pool) [pandas] Memo
Réfléchissez à la programmation de Python sur votre iPad
[Python] [Django] Comment utiliser le champ de choix et comment ajouter des options
Comment intégrer mod_wsgi dans Apache sur Windows Python
Comment exécuter python dans l'espace virtuel (pour MacOS)
Comment déployer une application Django dans le cloud Alibaba
Comment télécharger avec Heroku, Flask, Python, Git (Partie 3)
Comment exécuter des tests avec Python unittest
Mémo de déploiement de Django × Postgresql sur Docker vers Heroku
Comment exécuter Self bot avec Discord.py [Easy vandalism! ]
Comment télécharger avec Heroku, Flask, Python, Git (Partie 1)
Comment exécuter setUp une seule fois dans Python Unittest
Comment télécharger avec Heroku, Flask, Python, Git (Partie 2)
python, php, ruby Comment convertir un décimal en n
Comment profiter de Python sur Android !! Programmation en déplacement !!
Comment créer un environnement Python sur Amazon Linux 2
Comment gérer JSON en Ruby, Python, JavaScript, PHP
[2020.8 dernière] Comment installer Python
Exécutez Openpose sur Python (Windows)
Comment installer Python [Windows]
Comment installer Python2.7 python3.5 avec pyenv (sur RHEL5 CentOS5) (novembre 2016)
Comment exécuter un modèle de transformateur entraîné localement sur CloudTPU
Python sur Ruby et Ruby en colère sur Python
python3: Comment utiliser la bouteille (2)
Comment créer un nouvel environnement virtuel Python sur Ubuntu