Un mémo qui a fait un tutoriel pour exécuter python sur heroku

Notes personnelles

J'ai fait un tutoriel Python pour Heroku. https://devcenter.heroku.com/articles/getting-started-with-python Je l'ai laissé comme mémo, mais je ne suis pas resté coincé, donc c'est devenu un mémo de commande plutôt qu'un savoir-faire.

supposition

Python s'exécute localement Il y a aussi virtualenv

Installez postgresql sur Mac

brew intall postgresql

Set pour postgres

echo 'export PGDATA=/usr/local/var/postgres' >> ~/.zshrc #Dans chaque profil

Vous pouvez maintenant démarrer / arrêter avec pg_ctl start ou pg_ctl stop. (Habituellement, c'est gênant car il est déroutant avec postgres -D / usr / local / var / postgres) Vérifier en entrant en tant qu'utilisateur postgres depuis le début ou en affichant la liste de la base de données

psql -l #Affichage DB
psql postgres #Connectez-vous en tant qu'utilisateur postgres(Lorsque vous quittez\q)

Créer un compte sur Heroku

https://www.heroku.com/

Installer les outils CLI pour Heroku

brew install heroku-toolbelt

Puis connectez-vous à Heroku

$ heroku login
Enter your Heroku credentials.
Email: [email]
Password (typing will be hidden):
Logged in as [email]

De la préparation de l'exemple d'application au déploiement

Clonez l'exemple d'application.

git clone https://github.com/heroku/python-getting-started.git
$ cd python-getting-started

Si vous le pouvez, enregistrez l'application dans Heroku

$ heroku create
Creating morning-plateau-xxxx... done, stack is cedar-14
https://morning-plateau-xxxx.herokuapp.com/ | https://git.heroku.com/morning-plateau-xxxx.git
Git remote heroku added

L'application est enregistrée avec un nom approprié (morning-plateau-xxxx cette fois). Si vous voulez lui donner un nom, mettez-le après create. heroku create sanmple-name-app À ce stade, remote est enregistré dans le git local avec le nom heroku. Lorsque j'ai accédé à l'URL, cela ressemblait à une page initiale.

初期ページっぽいの

Ensuite, déployez l'exemple d'application

$ git push heroku master
Counting objects: 185, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (91/91), done.
Writing objects: 100% (185/185), 30.52 KiB | 0 bytes/s, done.
Total 185 (delta 80), reused 185 (delta 80)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Python app detected
remote: -----> Installing runtime (python-2.7.9)
remote: -----> Installing dependencies with pip
#Omis parce que c'est long
remote: -----> Compressing... done, 42.9MB
remote: -----> Launching... done, v4
remote:        https://morning-plateau-xxxx.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy.... done.

Déploiement terminé. En regardant la sortie, vous pouvez voir qu'il ne s'agit pas seulement de pousser, mais en quelque sorte de construction d'environnement et d'exécution de commandes.

Démarrez le processus pour exécuter l'application avec la commande suivante. J'ai spécifié l'échelle 1, mais cela coûtera-t-il de l'argent pour l'augmenter? Pour le déplacer pour le moment, "Assurez-vous qu'au moins une instance de l'application est en cours d'exécution".

$ heroku ps:scale web=1
Scaling dynos... done, now running web at 1:Free.

Lorsque j'exécute la commande ps, cela semble certainement fonctionner.

$ heroku ps
=== web (Free): gunicorn gettingstarted.wsgi --log-file -
web.1: up 2016/01/06 02:36:49 (~ 8m ago)

Au fait, quand web = 2, c'est devenu comme ça. Hmm. (Regardez plus tard)

$ heroku ps:scale web=2
Scaling dynos... failed
 !    Cannot update to more than 1 Free size dynos per process type.

Enfin, ouvrez l'application ci-dessous

heroku open

Facile. À ce stade, la page s'ouvre.

Afficher le journal

heroku logs
heroku logs --tail #Peut être vu dans la queue

Procfile?

Dans un fichier texte du répertoire racine de l'application, écrivez les commandes nécessaires pour lancer l'application. Le Procfile de l'exemple d'application Python était le suivant.

web: gunicorn gettingstarted.wsgi --log-file -

web est le type de processus, suivi de la commande. Lorsqu'il est démarré normalement, le processus s'exécute avec un dyno. (Qu'est-ce que dyno? Voici un conteneur léger qui exécute les commandes Procfile) Si vous voulez le faire correctement, heroku ps.

Par défaut, un dyno est gratuit et s'il n'y a pas d'accès pendant 30 minutes ou si vous vous déplacez pendant 18 heures ou plus par jour, vous passerez en mode veille. Si c'est dans les 18 heures, il démarrera à chaque fois qu'un accès arrive, mais après le sommeil, il démarrera, donc ce sera un peu lourd. Si vous ne voulez pas dormir ou si vous voulez faire une mise à l'échelle, passez à Professionnel.

Dépendances de l'application

Si requirements.txt se trouve dans le répertoire racine, Heroku semble le reconnaître comme une application python. Le contenu de requirements.txt de l'exemple d'application est le suivant.

$ cat requirements.txt
dj-database-url==0.3.0
Django==1.8.1
django-postgrespool==0.3.0
gunicorn==19.3.0
psycopg2==2.6
SQLAlchemy==1.0.4
whitenoise==1.0.6

Heroku installe les bibliothèques nécessaires sur cette base, bien qu'elle soit légèrement différente de celle du didacticiel. Comme vous le savez, c'est le même format que pip freeze. Puisqu'il s'agit d'un exemple d'application que j'ai téléchargé, je vais créer le même environnement localement pour le moment. La version de python est écrite dans runtime.txt dans le répertoire racine. (Parce que j'utilisais pyenv, j'ai créé un environnement avec.)

$ cat runtime.txt
python-2.7.9
$ pyenv install 2.7.9
$ pyenv virtualenv 2.7.9 sample-app
$ cd [workspace]
$ pyenv local sample-app
$ pip install -r requirements.txt --allow-all-external

Exécutez localement

Ce que vous exécutez sur heroku fonctionne localement.

$ python manage.py collectstatic #Collectez les fichiers statiques de votre projet en un seul endroit
$ heroku local web

Accédez à http: // localhost: 5000 / et confirmez qu'il fonctionne.

Refléter les changements locaux dans heroku

Le flux de changer le local de manière appropriée et de pousser à heroku. J'importe les demandes, j'apporte des modifications pour ignorer les demandes vers le site approprié et j'affiche la réponse, et je pousse. Tout d'abord, ajoutez ce qui suit à requirements.txt.

requests==2.3.0

Ajoutez ce qui suit au début de hello / views.py et

import requests

Réécrivez la fonction appelée index comme suit

def index(request):
    r = requests.get('http://httpbin.org/status/418')
    print r.text
    return HttpResponse('<pre>' + r.text + '</pre>')

Exécutez localement

$ pip install -r requirements.txt --allow-all-external
$ heroku local

Quand je vais sur http: // localhost: 5000 /, le contenu de http://httpbin.org/status/418 est trouvé.

    -=[ teapot ]=-

       _...._
     .'  _ _ `.
    | ."` ^ `". _,
    \_;`"---"`|//
      |       ;/
      \_     _/
        `"""`

mignonne.

Puisqu'il a changé en toute sécurité, je vais le refléter dans heroku.

$ git add .
$ git commit -m "Demo"
$ git push heroku masterg
$ heroku open

Déploiement terminé, la même page de théière s'ouvre. Le déploiement sur heroku est essentiellement ce flux.

Ajouter un module complémentaire

À titre d'exemple, ajoutez une trace papier.

$ heroku addons:create papertrail
 !    Please verify your account to install this add-on plan (please enter a credit card) For more information, see https://devcenter.heroku.com/categories/billing Verify now at https://heroku.com/verify

J'ai été grondé. L'addon semble avoir vérifié pour éviter les abus. J'avais peur d'enregistrer les informations Creca et de réessayer.

$ heroku addons:create papertrail
Creating papertrail-rigid-xxxx... done, (free)
Adding papertrail-rigid-xxxx to morning-plateau-xxxx... done
Setting PAPERTRAIL_API_TOKEN and restarting morning-plateau-xxxx... done, v6
Welcome to Papertrail. Questions and ideas are welcome ([email protected]). Happy logging!
Use `heroku addons:docs papertrail` to view documentation.

Maintenant déployé. Vous pouvez voir la liste actuelle des modules complémentaires avec la commande suivante.

$ heroku addons
Add-on                                         Plan       Price
─────────────────────────────────────────────  ─────────  ─────
heroku-postgresql (postgresql-octagonal-xxxx)  hobby-dev  free
 └─ as DATABASE

papertrail (papertrail-rigid-xxxx)             choklad    free
 └─ as PAPERTRAIL

The table above shows add-ons and the attachments to the current app (morning-plateau-xxxx) or other apps.

Jetez un œil à papertrail

heroku addons:open papertrail

Le navigateur s'ouvre et vous pouvez consulter le journal.

console

Vous pouvez utiliser la console heroku avec la commande heroku run COMMAND. Ici, la commande semble s'exécuter sur un dyno temporaire appelé dyno unique.

$ heroku run pwd
Running pwd on morning-plateau-xxxx... up, run.5945
/app
$ heroku run python manage.py shell
Running python manage.py shell on morning-plateau-xxxx... up, run.4047
Python 2.7.9 (default, Dec 11 2014, 17:18:51)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> import requests
>>> print requests.get('http://httpbin.org/status/418').text

    -=[ teapot ]=-

       _...._
     .'  _ _ `.
    | ."` ^ `". _,
    \_;`"---"`|//
      |       ;/
      \_     _/
        `"""`

De même, vous pouvez exécuter le bash de dyno ci-dessous.

$ heroku run bash
Running bash on morning-plateau-xxxx... up, run.3252
$ ls
app.json  gettingstarted  hello  manage.py  Procfile  Procfile.windows	README.md  requirements.txt  runtime.txt  staticfiles
$ exit
exit

Définition des variables de réglage

Définition des variables et des ressources externes telles que la clé secrète que vous souhaitez placer en externe

Au moment de l'exécution, les variables de configuration vont dans les variables d'environnement.

Ajoutez ce qui suit au début de hello / view.py.

import os

De plus, réécrivez «index» comme suit

def index(request):
    times = int(os.environ.get('TIMES',3))
    return HttpResponse('Hello! ' * times)

Ajoutez ce qui suit au fichier .env local. Regardez ici et les variables d'environnement sont définies.

TIMES=2

Vous pouvez également définir des variables de configuration sur Heroku avec heroku config: set. Vous pouvez également le vérifier avec heroku config.

$ heroku config:set TIMES=2
Setting config vars and restarting morning-plateau-xxxx... done
TIMES: 2
$ heroku config
=== morning-plateau-xxxx Config Vars
DATABASE_URL:         xxxx
PAPERTRAIL_API_TOKEN: xxxx
TIMES:                2

Préparation de la base de données (module complémentaire gratuit de Postgres)

Diverses bases de données sont également préparées par addon. Puisqu'il s'agit d'un addon, vous pouvez vérifier l'actuel avec heroku addons. Vous pouvez voir que l'URL de la base de données de destination de la connexion est enregistrée dans DATABASE_URL de heroku config.

heroku config
=== morning-plateau-xxxx Config Vars
DATABASE_URL:         postgres://~~~ #Abréviation

De plus, la commande heroku pg donne des détails.

$ heroku pg
=== DATABASE_URL
Plan:        Hobby-dev
Status:      Available
Connections: 0/20
PG Version:  9.4.4
Created:     2016-01-05 17:36 UTC
Data Size:   6.4 MB
Tables:      0
Rows:        0/10000 (In compliance)
Fork/Follow: Unsupported
Rollback:    Unsupported
Add-on:      postgresql-octagonal-xxxx

La base de données est déjà activée dans l'exemple de projet, et vous pouvez y accéder en ajoutant / db à la fin de l'URL, mais dans l'état actuel, la table n'a pas encore été créée, donc une erreur se produira si vous y accédez. Exécutez manage.py migrate dans Heroku pour créer une table dans django.

$ heroku run python manage.py migrate
Running python manage.py migrate on morning-plateau-xxxx... up, run.6683
Operations to perform:
  Synchronize unmigrated apps: messages, hello, staticfiles
  Apply all migrations: admin, sessions, auth, contenttypes
  # ...
  #Abréviation

Si vous visitez à nouveau ʻURL + / db`, vous verrez une page simple avec plus d'enregistrements chaque fois que vous visitez, cette fois au lieu d'une erreur.

Les modèles de base de données sont dans «hello / models.py» et les paramètres sont dans «gettingstarted / settings.py». (Je n'expliquerai pas sur django)

Si vous avez postgresql localement, vous pouvez accéder à la base de données de heroku à partir du répertoire racine de votre projet avec:

$ heroku pg:psql
---> Connecting to DATABASE_URL
psql (9.4.5, server 9.4.4)
Type "help" for help.

morning-plateau-xxxx::DATABASE=> select * from hello_greeting;
 id |             when
----+-------------------------------
  1 | 2016-01-11 16:09:35.860529+00
  2 | 2016-01-11 16:10:28.385479+00
(2 rows)

Pour plus d'informations sur Heroku Postgres, voir https://devcenter.heroku.com/articles/heroku-postgresql.

L'étape suivante

C'est la fin du tutoriel. Enfin, deux liens sont fournis à l'étape suivante.

Recommended Posts

Un mémo qui a fait un tutoriel pour exécuter python sur heroku
Une histoire sur l'exécution de Python sur PHP sur Heroku
Un mémorandum où je suis tombé sur mon HEROKU & Python personnel (Flask)
Un mémo contenant Python2.7 et Python3 dans CentOS
Un mémorandum pour toucher Python Flask avec Heroku
Mémo du didacticiel Python OpenCV
Mémo connecté à HiveServer2 d'EMR avec python
[Heroku] Mémo pour le déploiement d'applications Python à l'aide d'Heroku sous Windows [Python]
Remarques sur l'installation de Chainer 1.5 pour GPU sous Windows
Mémo de déploiement de Django × Postgresql sur Docker vers Heroku
expression canonique python ou mémo d'objet correspondant
Une note d'essayer un simple tutoriel MCMC sur PyMC3
Manipulation de python sur mac
Record des leçons de l'enfer imposées aux étudiants débutants en Python
Comment développer dans un environnement virtuel Python [Memo]
[GCP] Un mémorandum lors de l'exécution d'un programme Python avec Cloud Functions
Un mémo que j'ai écrit une fonction de base en Python en utilisant la récurrence
Construire un environnement Python sur Mac
Mémo de construction de l'environnement Python sur Windows 10
Une bonne description des décorateurs Python
[Python] Mémo d'opération de pandas DataFrame
Construire un environnement Python sur Ubuntu
[Python] Un mémorandum de belle soupe4
Créer un environnement Python sur Mac (2017/4)
Un bref résumé de la collection Python
Mémo de construction de l'environnement Python sur Mac
python + django + scikit-learn + mecab (1) avec heroku
"Python startbook" mémo compatible python3
python + django + scikit-learn + mecab (2) avec heroku
Créer un environnement python dans centos
Python json.loads () renvoie str dans Heroku
Construire un environnement pour python3.8 sur Mac
[Python] Mémo de création de l'outil de grattage
Graphiques Python séparés (mémo)
Créer un environnement python3 sur CentOS7
[Memo] Tweet sur Twitter avec Python
Exécutez régulièrement Python sur Heroku Scheduler
[Python] Mémo des phrases fréquemment utilisées dans les scripts Python
Facile! Implémenter un bot Twitter qui s'exécute sur Heroku en Python
Remarques sur l'utilisation de la saisie semi-automatique lors de l'exécution interactive de Python sous Windows
J'ai fait beaucoup de recherches sur la façon dont Python est exécuté
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Tout, de la création d'un environnement Python à son exécution sous Windows
Migrer les applications Django exécutées sur Python 2.7 vers Python 3.5
Mémo Python
[Mémo d'apprentissage] Bases de la classe par python
Une compréhension approximative de python-fire et un mémo
Construire un environnement python sur MacOS (Catallina)
Afficher une liste d'alphabets en Python 3
mémo python
Créez un environnement python sur votre Mac
Une note lors de l'utilisation de systemd pour garder CentOS 7 toujours en cours d'exécution des scripts Python qui n'étaient pas particulièrement conscients de l'exécution en tant que démon
Créer un diagramme de relations des modules Python
Élément de mémo Python efficace 4 Écrire une fonction d'aide au lieu d'une expression compliquée
Mémo Python
Carte des informations de location sur une carte avec python
Créer un serveur CGI fonctionnant sur Python 3 sur Docker
Connectez beaucoup de Python ou et et