[PYTHON] Publication du projet django développé dans Cloud9 sur heroku

Publication du projet django développé dans Cloud9 sur heroku

prologue

J'ai un peu essayé d'utiliser heroku dans article précédent. Trois mois plus tard, mon expérience avec R a augmenté, mais cette fois je parle d'utiliser Python au lieu de R.

Il y a beaucoup de packages pour R, beaucoup de livres ont été publiés l'année dernière, et récemment, il y a une pause où tous les gars de R que j'ai rencontrés via Tokyo R participent tout le temps, donc c'est très pratique, mais fondamental Parce qu'il a été créé avec un traitement statistique à l'esprit, awk a été utilisé pour le prétraitement des données. Cependant, awk est difficile à utiliser dans l'environnement Windows 7 (32 bits) de l'entreprise. Donc, en fait, j'ai commencé à collecter des informations vers l'été 2015 et j'ai participé à diverses sessions d'étude liées à Python (et Julia).

Il semble que j'ai beaucoup participé quand je les ai mis côte à côte, mais j'ai participé plusieurs fois seulement au top StartPython Club, et les autres n'ont participé qu'une seule fois.

J'étais un débutant en Python, et j'ai reçu une consultation d'un collègue de travail me disant "Je veux créer une application web avec django".

  1. Avec Python 3
  2. Avec django 1.9
  3. Créez une application Web sur Cloud9 IDE
  4. Migrer de SQLite3 vers PostgreSQL
  5. Déployer sur heroku

C'est une histoire que j'ai fait de mon mieux.

J'ai eu du mal surtout en 3-5, alors j'aimerais me concentrer sur ce domaine.

Choses à préparer

Seulement ça. Soit dit en passant, la raison de Cloud 9 est que l'environnement de développement intégré sur le cloud, qui vous permet de préparer le même environnement, était le plus pratique pour répondre à diverses questions de collègues qui ont commencé à s'intéresser à Python.

De plus, comme je suis Mac à la maison et Windows 7 au travail, je ne veux pas être influencé par la différence de système d'exploitation, de code de caractère et de code de saut de ligne.

Développement d'applications Python3 et django sur Cloud9

Créer un espace de travail django

Connectez-vous à Cloud9 et cliquez sur Créer un nouvel espace de travail dans l'écran du tableau de bord. ワークスペースの追加

Entrez le nom du projet (provisoirement abc), sélectionnez le modèle django dans la liste des modèles en bas et cliquez sur le bouton Créer un espace de travail. djangoプロジェクトを選択

L'espace de travail a été créé avec le modèle django. La structure initiale du dossier est comme ça. 初期のフォルダ構成 c9_abc est le dossier du projet django.

Faites-en un environnement Python 3

Le modèle Cloud 9 configure Python 2.7 et son django correspondant. Je veux développer en Python3, modifions donc les paramètres pour que cela fonctionne en Python3.

Ouvrez l'écran des paramètres du projet avec Cloud 9 - Préférences dans le menu de l'espace de travail. Preferences

Changez Python 2 en Python 3 dans la section Prise en charge des langues. Language Support

Cependant, même si la préférence est Python3, si vous définissez python --version sur la ligne de commande, cela reste Python2.7.

$ python --version
Python 2.7.6

Je prévois d'appuyer sur python manage.py migrate etc. plusieurs fois plus tard, alors assurez-vous que / usr / bin / python pointe vers Python3.

$ sudo mv /usr/bin/python /usr/bin/python2
$ sudo ln -s /usr/bin/python3 /usr/bin/python
$ python —version
python 3.4.3    

Je me suis référé à cet article pour la méthode. [^ 1] Cloud 9 est également pratique car vous pouvez le faire sans hésitation.

Maintenant, exécutons le projet abc. Cliquez sur Exécuter le projet dans la barre de menus. Run Project

Cela ne marche pas. djangoエラー

Il semble dire "je n'ai pas de django". Peut-être que django n'est pas inclus à cause de Python3. Alors, installez django. Puisqu'il s'agit de Python3, utilisons pip3.

$ sudo pip3 install django

Lorsque j'ai cliqué à nouveau sur Exécuter le projet, cela a bien fonctionné cette fois. django動いた

Remplacer par un ensemble de fichiers django pour heroku

Si vous développez simplement sur Cloud9, vous pouvez le laisser tel quel, mais afin de le déployer plus tard sur heroku, remplacez-le par le modèle du projet django préparé par heroku. J'ai fait référence à cet article [^ 2] pour la procédure ici.

Tout d'abord, supprimez le projet django qui a été automatiquement configuré lors de la création de l'espace de travail. Non seulement le dossier du projet mais également manage.py etc. seront supprimés. さっくり削除

Ensuite, apportez le modèle django pour heroku depuis GitHub.

$ django-admin.py startproject --template=https://github.com/heroku/heroku-django-template/archive/master.zip --name=Procfile c9_abc

Le dernier c9_abc a le même nom que le dossier de projet django que vous avez supprimé précédemment.

En regardant la structure des dossiers, c'est un peu étrange. La hiérarchie est décalée d'un. 階層がひとつずれている

Montez d'un niveau à la fois pour que manage.py soit au niveau supérieur. Le dossier abc \ c9_abc \ c9_abc restant dans la couche inférieure sera vide, supprimez-le. 階層を修正

Dans l'article auquel j'ai fait référence, j'ai édité settings.py et wsgi.py pour qu'ils fonctionnent sur Cloud9, mais lors du déploiement sur heroku, j'ai dû les remettre, ce qui est ennuyeux, j'ai donc installé les bibliothèques nécessaires.

$ sudo pip3 install dj-database-url
$ sudo pip3 install Whitenoise
$ sudo pip3 install Gunicorn

Vérifiez le fonctionnement avec Run Project.

Développement et test d'applications

Je vais omettre le contenu de l'application cette fois.

Après tout, je suis nouveau sur Python, donc je dois étudier la grammaire de Python et comment utiliser les bibliothèques avant que django ne continue.

Pour savoir comment utiliser la bibliothèque Python, [Recette soigneusement sélectionnée de la bibliothèque Python (Revue technique)](http://www.amazon.co.jp/Python-%E3%83%A9%E3%82%A4%E3%83% 96% E3% 83% A9% E3% 83% AA% E5% 8E% B3% E9% 81% B8% E3% 83% AC% E3% 82% B7% E3% 83% 94-% E6% B1% A0 % E5% 86% 85-% E5% AD% 9D% E5% 95% 93 / dp / 4774717075 / ref = sr_1_1? Ie = UTF8 & qid = 1457793060 & sr = 8-1 & mots-clés = python +% E3% 83% A9% E3% 82% Merci beaucoup pour A4% E3% 83% 96% E3% 83% A9% E3% 83% AA).

En ce qui concerne django, j'ai été particulièrement reconnaissant aux sites suivants.

J'ai réussi à faire quelque chose qui fonctionnait, je l'ai montré à mes collègues de travail et je l'ai corrigé, et c'était terminé pour le moment. Avec Cloud9, contrairement au développement local, vous pouvez afficher l'application simplement en envoyant l'URL, ou vous pouvez partager le même espace de travail si vous avez un collègue avec un compte Cloud9.

En passant, expliquer à mon collègue l'application que j'ai créée cette fois a grandement amélioré ma compréhension de django.

Migrer de SQLite3 vers PostgreSQL

Eh bien, c'est une application terminée, mais il y a encore une chose à faire avant de la déployer sur heroku. Par défaut, django utilise SQLite3. Même si vous le déployez sur heroku tel quel, cela fonctionnera pour le moment, mais il existe une telle description à l'aide de heroku.

SQLite on Heroku

Bref, il semble que "ça marche pour le moment, mais ça va disparaître dans 24 heures à cause du mécanisme". Au fait, j'ai essayé de voir combien de temps il disparaîtrait, mais il n'a pas disparu même après environ une semaine. Je ne sais pas si cela s'est produit ou parce que je vérifie tous les jours "Est-ce que c'est parti?", Mais je ne veux pas être si excité dans les opérations de production, alors j'ai décidé de passer à PostgreSQL avec obéissance. Ici, j'ai fait référence à cet article [^ 3] et à cet article [^ 4].

Puisque PostgreSQL est installé à l'origine dans l'espace de travail Cloud9, il n'est pas nécessaire de l'installer à nouveau, mais si vous regardez l'état, il est en panne, alors démarrez le service.

$ psql --version
psql (PostgreSQL) 9.3.11
$ sudo service postgresql status
9.3/main (port 5432): down
$ sudo service postgresql start
 * Starting PostgreSQL 9.3 database server
    ...done.

Installez la bibliothèque psycopg2 pour utiliser PostgreSQL à partir de Python.

$ sudo pip3 install psycopg2

Connectez-vous ensuite à PostgreSQL. Veuillez noter qu'il existe deux sudos.

$ sudo sudo -u postgres psql

Créez un utilisateur de connexion (myuser dans ce cas) dans la console PostgreSQL.

postgres=# CREATE ROLE myuser LOGIN;
CREATE ROLE
postgres=# \password myuser
Enter new password: 
Enter it again: 

Créez une base de données (abc dans ce cas) à utiliser dans l'application. Dans Cloud9, je me suis mis en colère contre le nouveau codage (UTF8) est incompatible avec le codage de la base de données de modèles (SQL_ASCII) sans ajouter le dernier TEMPLATE template0, mais j'étais inquiet pendant un moment car je ne savais pas quoi faire.

postgres=# CREATE DATABASE abc OWNER myuser ENCODING 'UTF8' TEMPLATE template0;                                                                                
CREATE DATABASE
postgres=# \q

Le côté PostgreSQL est maintenant prêt. Puis éditez settings.py dans le dossier django project (c9_abc).

#DATABASES = {
#    'default': {
#        'ENGINE': 'django.db.backends.sqlite3',
#        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#    }
#}   
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', 
        'NAME': 'abc',
                # The following settings are not used with sqlite3:
                'USER': ’myuser',
                'PASSWORD': 'your_password_here',
                'HOST': '127.0.0.1', 
                'PORT': 5432, 
            }
}

La dernière étape était un peu addictive. Dans les articles auxquels j'ai fait référence, les deux sont écrits comme OK avec python manage.py syncdb, mais la note de publication de django 1.9 dit La commande syncdb est supprimée., qui est une fonction qui ne peut plus être utilisée. Je vais. Quand je l'ai recherché, il a été décrit dans [Document officiel de django1.8](https://docs.djangoproject.com/en/1.8/ref/django-admin/#syncdb), et syncdb est migrate`. Il semble que l'alias inclut une étape pour créer un super utilisateur. Cela signifie

$ python manage.py migrate
$ python manage.py createsuperuser

C'est bon.

La migration devrait maintenant être terminée. Au cas où, vérifions si l'application fonctionne correctement.

Déployer sur heroku

Puisqu'il s'agit d'un modèle fourni à l'origine par heroku, les fichiers (runtime.txt et requirements.txt) qui indiquent à heroku la version Python et les bibliothèques à installer sont créés dans le dossier racine. Cependant, heroku est également Python 2.7 par défaut, alors modifiez runtime.txt.

[runtime.txt]
python-3.4.3

Ensuite, mettez également à jour requirements.txt.

$ pip3 freeze > requirements.txt

Cependant, si rien n'est fait, toutes les bibliothèques incluses dans l'environnement Python3 de Cloud9 seront incluses, alors vérifiez le contenu et supprimez les lignes de bibliothèque inutiles. Si l'environnement est d'abord désactivé avec venv etc., il n'est pas nécessaire de supprimer les lignes de bibliothèque inutiles. Il peut y avoir des dépendances de bibliothèque, donc si vous voulez le faire correctement, désactivez d'abord l'environnement.

Ensuite, installez le kit d'outils heroku.

$ wget -O- https://toolbelt.heroku.com/install-ubuntu.sh | sh

Une fois l'installation terminée, connectez-vous immédiatement à heroku.

$ heroku login

Ceux qui n'ont pas créé de référentiel git lors du travail de développement d'applications le créeront.

$ git init
$ git add -A
$ git commit -m 'initial commit'

Créez un référentiel d'applications sur heroku. Dans l'exemple ci-dessous, le nom de l'application est «myherokuapp». Même si vous n'ajoutez pas ceci, heroku l'attribuera automatiquement, mais ce sera un nom long d'environ 20 caractères.

$ heroku create myherokuapp

Ensuite, il est temps de se déployer.

$ git push heroku master
Counting objects: 130, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (121/121), done.
Writing objects: 100% (130/130), 1.91 MiB | 726.00 KiB/s, done.
Total 130 (delta 52), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Python app detected
remote: -----> Installing python-3.4.3
remote:      $ pip install -r requirements.txt
remote:        Collecting Django==1.9.4 (from -r requirements.txt (line 1))
remote:          Downloading Django-1.9.4-py2.py3-none-any.whl (6.6MB)

(Omis) remote: https://myherokuapp.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy.... done. To https://git.heroku.com/myherokuapp.git * [new branch] master -> master

Après un certain temps, le déploiement sera terminé comme ci-dessus. Si vous obtenez une erreur, vérifiez le journal et le message d'erreur et apportez les corrections nécessaires.

Faisons une pause. Initialisez la base de données et créez un super utilisateur sur heroku.

$ heroku run python manage.py migrate
$ heroku run python manage.py createsuperuser

Ouvrons l'url de l'application qui était affichée lors du déploiement (https: // myherokuapp.herokuapp.com / dans l'exemple ci-dessus).

Cela a-t-il fonctionné sans problème? Ensuite, désactivez le mode de débogage de django. Modifiez settings.py sur Cloud9.

# DEBUG=True
DEBUG=False

Reflétez ce correctif dans heroku.

$ git add .
$ git commit -m 'Debug mode off'
$ git push heroku master

Gardez à l'esprit que vous continuerez à utiliser ces trois lignes (bien que vous puissiez modifier le commentaire de validation si nécessaire) si vous les modifiez à l'avenir.

C'est tout. Si vous avez des malentendus ou des erreurs, n'hésitez pas à nous le faire savoir en modifiant la demande. Je vous remercie.


Cet article a été écrit par @ hirokiky's PileMd

Article de référence

Recommended Posts

Publication du projet django développé dans Cloud9 sur heroku
Page DJango publiée sur heroku: Practice
Déployer le projet django sur heroku
Enregistrer l'application Django dans le projet
Déployer l'application Django sur Heroku
python + django + scikit-learn + mecab (1) avec heroku
python + django + scikit-learn + mecab (2) avec heroku
Blog Django sur heroku: implémentation de la connexion
Comment déployer une application Django sur heroku en seulement 5 minutes
Déployer l'API Django avec heroku (mémo personnel)
Remarques sur la création de fichiers statiques avec Django
Déployer l'application Django sur Heroku [Partie 2]
Déployer l'application Django sur Heroku [Partie 1]
[Django] css dans le projet ne peut pas être lu
Django Heroku Deploy 1
Redis sur Heroku
Modèle dans Django
shimehari sur heroku
Référence du projet Django
Django Heroku Deploy 2
Formulaire à Django
Comment déployer une application Django dans le cloud Alibaba
Publiez votre application Django sur Amazon Linux + Apache + mod_wsgi
Mémo de déploiement de Django × Postgresql sur Docker vers Heroku
Page DJango publiée sur heroku: Préparation mon point addictif
Notes diverses sur le déploiement de l'application django sur Heroku
Comment référencer des fichiers statiques dans un projet Django