[Pas besoin de créer un environnement local] Déployez une application de bouteille Python créée avec Cloud 9 sur Heroku

introduction

Ceci est un mémo pour moi, les détails sont les suivants.

Conditions préalables

Ce que j'ai fait

[Cloud 9] Créer un espace de travail

https://c9.io/new Créer un espace de travail en spécifiant Python dans Choisir un modèle image

[Cloud 9] Mise à jour de la version Python

Par défaut, Cloud9 a une version Python de Python2, alors changez-la pour utiliser Python3.5.1. Appuyez sur le bouton vert + en bas de l'écran pour ouvrir un terminal avec [Nouveau terminal] et y saisir des commandes. image

#Vérifiez la version avant de changer
$ python --version
Python 2.7.6

#Enregistrez le système Python2
$ sudo mv /usr/bin/python /usr/bin/python2

#Python3.Lien vers 5
$ sudo ln -s /usr/bin/python3.5 /usr/bin/python

#Confirmez que la version a changé
$ python --version
Python 3.5.1

[Cloud 9] Présentation de la bouteille

S'il est laissé tel quel, la bouteille à utiliser cette fois n'est pas incluse, alors installez-la.

$ sudo pip install bottle
Downloading/unpacking bottle
  Downloading bottle-0.12.9.tar.gz (69kB): 69kB downloaded
  Running setup.py (path:/tmp/pip_build_root/bottle/setup.py) egg_info for package bottle
    
Installing collected packages: bottle
  Running setup.py install for bottle
    changing mode of build/scripts-3.5/bottle.py from 644 to 755
    
    changing mode of /usr/local/bin/bottle.py to 755
Successfully installed bottle
Cleaning up...

[Cloud 9] Supprimer tous les fichiers

Pour le moment, supprimez tous les fichiers générés à l'origine. image

[Cloud 9] Créer et coder app.py

Créez un fichier avec [Clic droit] => [Nouveau fichier], et entrez app.py avec [Clic droit] => [Renommer] sur le fichier créé. image

Enfin, nous allons implémenter app.py à partir d'ici. Tout d'abord, lorsque vous accédez à http: // {votre-domaine} / hello / sur votre navigateur, Hello World s'affiche.

app.py


# -*- coding:utf-8 -*-

import os
from bottle import route, run


@route('/hello/')
def hello():
    return "Hello World"


run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))

[Cloud 9] Essayez de courir

Lorsque vous appuyez sur le bouton Exécuter et que vous l'exécutez, il vous indiquera l'URL à voir dans le navigateur, alors ouvrez-le. À ce stade, n'oubliez pas d'ajouter "/ hello /" avec le routage défini à la fin. image

Il a été affiché en toute sécurité sur le navigateur !! image

[Cloud 9] S'engager sur GitHub

Une fois que vous avez fait cela, engagez-vous sur GitHub.

Tout d'abord, créez un nouveau référentiel sur GitHub. https://github.com/new

L'enregistrement de la clé SSH est requis pour valider de Cloud9 vers GitHub. Enregistrez la clé publique affichée par [Gear mark] => [SSH Keys] en haut à droite du tableau de bord Cloud9 sur le GitHub lié. https://c9.io/account/ssh => https://github.com/settings/ssh

Après avoir enregistré la clé, appuyez dessus sur le terminal Cloud 9.


#Faites attention au répertoire à exécuter
$ pwd
/home/ubuntu/workspace

#Générer les fichiers requis pour le déploiement
$ pip freeze | grep bottle > requirements.txt #Il semble préférable de ne mettre que le package que vous utilisez
$ python --version | sed 's/\ /-/g' |sed 's/P/p/g' > runtime.txt
$ echo web: python app.py > Procfile 

#Ce qui suit est pour référence seulement, veuillez copier la commande affichée sur l'écran du référentiel nouvellement créé, le cas échéant.
$ echo "# cloud9-bottle-heroku" >> README.md
git init
git add .
git commit -m "first commit"
git remote add origin https://github.com/path/to-youre-repository.git #Veuillez noter que cela dépend de la personne
git push -u origin master

[Cloud 9] déployer sur Heroku

Ensuite, nous allons le refléter dans heroku et continuer à travailler dans le terminal Cloud 9. La ceinture à outils Heroku semble avoir été installée à l'avance, aucun ajout n'est donc nécessaire.

#Tout d'abord, connectez-vous à heroku.
$ heroku login

#Créer une application(Veuillez modifier le cas échéant afin que le nom ne soit pas couvert)
$ heroku create cloud9-bottle-heroku
Creating cloud9-bottle-heroku... done, stack is cedar-14
https://cloud9-bottle-heroku.herokuapp.com/ | https://git.heroku.com/cloud9-bottle-heroku.git

$ git push heroku master
Counting objects: 21, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (21/21), 1.95 KiB | 0 bytes/s, done.
Total 21 (delta 5), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Python app detected
remote: -----> Installing python-3.5.1
remote:      $ pip install -r requirements.txt
remote:        Collecting bottle==0.12.9 (from -r requirements.txt (line 1))
remote:          Downloading bottle-0.12.9.tar.gz (69kB)
remote:        Installing collected packages: bottle
remote:          Running setup.py install for bottle: started
remote:            Running setup.py install for bottle: finished with status 'done'
remote:        Successfully installed bottle-0.12.9
remote: 
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote: 
remote: -----> Compressing...
remote:        Done: 49M
remote: -----> Launching...
remote:        Released v3
remote:        https://cloud9-bottle-heroku.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/cloud9-bottle-heroku.git
 * [new branch]      master -> master

J'ai pu l'ouvrir dans le navigateur !! https://cloud9-bottle-heroku.herokuapp.com/hello/ image

[Heroku] Coopération GitHub

Modifiez le paramètre afin qu'il soit automatiquement déployé sur heroku lorsque vous le poussez sur GitHub. Sélectionnez l'application cible dans le tableau de bord Heroku et sélectionnez Déployer en haut de l'écran. image

Sélectionnez GitHub dans la méthode de déploiement, entrez le nom du référentiel dans Se connecter à GitHub, recherchez et connectez-vous où le référentiel cible est affiché. image

Sélectionnez la branche cible comme il convient et appuyez sur Activer les déploiements automatiques pour terminer le paramètre. image

Vous pouvez vérifier si le déploiement automatique fonctionne à partir de l'activité en haut de l'écran. Essayez de pousser un commit vide depuis le terminal Cloud 9 pour voir si le déploiement est réellement terminé.

 $ git commit --allow-empty -m "deploy test"
[master 9912982] deploy test

$ git push origin master

Si vous attendez environ une minute après avoir tapé la commande, puis ouvrez l'onglet Activité, vous pouvez voir que Deploy a été exécuté. image

Maintenant, si vous poussez vers GitHub sans git push heroku master, la mise à jour sera également reflétée du côté Heroku.

Où j'étais accro

Contenu de requirements.txt

Il semble préférable de le maintenir au minimum nécessaire.

#la première
$ pip freeze > requirements.txt

#Je me suis fâché avec une dépendance quand j'ai poussé à heroku
$ git push heroku master                                                                                                                                  
Counting objects: 18, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (13/13), done.
Writing objects: 100% (18/18), 1.73 KiB | 0 bytes/s, done.
Total 18 (delta 4), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Python app detected
remote: -----> Installing python-3.5.1
remote:      $ pip install -r requirements.txt
remote:        Collecting Pillow==2.3.0 (from -r requirements.txt (line 1))
remote:          Downloading Pillow-2.3.0.zip (2.4MB)
remote:        Collecting bottle==0.12.9 (from -r requirements.txt (line 2))
remote:          Downloading bottle-0.12.9.tar.gz (69kB)
remote:        Collecting chardet==2.2.1 (from -r requirements.txt (line 3))
remote:          Downloading chardet-2.2.1-py2.py3-none-any.whl (180kB)
remote:        Collecting colorama==0.2.5 (from -r requirements.txt (line 4))
remote:          Downloading colorama-0.2.5.zip
remote:        Collecting decorator==3.4.0 (from -r requirements.txt (line 5))
remote:          Downloading decorator-3.4.0.tar.gz
remote:        Collecting html5lib==0.999 (from -r requirements.txt (line 6))
remote:          Downloading html5lib-0.999.tar.gz (885kB)
remote:        Collecting ipython==1.2.1 (from -r requirements.txt (line 7))
remote:          Downloading ipython-1.2.1.tar.gz (8.7MB)
remote:        Collecting matplotlib==1.3.1 (from -r requirements.txt (line 8))
remote:          Downloading matplotlib-1.3.1.tar.gz (42.7MB)
remote:        Collecting nose==1.3.1 (from -r requirements.txt (line 9))
remote:          Downloading nose-1.3.1.tar.gz (274kB)
remote:        Collecting numpy==1.8.2 (from -r requirements.txt (line 10))
remote:          Downloading numpy-1.8.2.tar.gz (3.8MB)
remote:        Collecting pycurl==7.19.3 (from -r requirements.txt (line 11))
remote:          Downloading pycurl-7.19.3.tar.gz (113kB)
remote:        Collecting pygobject==3.12.0 (from -r requirements.txt (line 12))
remote:          Could not find a version that satisfies the requirement pygobject==3.12.0 (from -r requirements.txt (line 12)) (from versions: 2.28.3)
remote:        No matching distribution found for pygobject==3.12.0 (from -r requirements.txt (line 12))
remote: 
remote:  !     Push rejected, failed to compile Python app
remote: 
remote: Verifying deploy....
remote: 
remote: !       Push rejected to cloud9-bottle-heroku.
remote: 
To https://git.heroku.com/cloud9-bottle-heroku.git
 ![remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/cloud9-bottle-heroku.git'

#Ce n'était pas grave si je le pressais.
$ pip freeze | grep bottle > requirements.txt

Notation de runtime.txt

Quand j'ai imprimé le résultat de python --version, c'était python au lieu de Python.

#Mauvais exemple
Python-3.5.1

#Bon exemple
python-3.5.1

en conclusion

Grâce à Cloud9, il n'est pas nécessaire de créer un environnement local, mais pour une raison quelconque, le mouvement se bloque parfois, et dans mon environnement, le développement à l'aide de PyCharm était une impression plus confortable. Cependant, compte tenu du cas du développement avec plusieurs terminaux, je pense qu'il est gênant d'organiser ces environnements de développement, donc je pense qu'il existe une option à utiliser dans un tel cas. Comme Heroku n'utilise que le minimum cette fois, il y a beaucoup de parties que je ne comprends pas bien, et il semble que j'ai besoin de dormir 6 heures par jour, mais c'est bien de pouvoir publier l'application sans paramètres détaillés. ..

référence

Heroku Python Support | Heroku Dev Center : https://devcenter.heroku.com/articles/python-support Publiez une application Web en 4 minutes 33 secondes à l'aide de la bouteille Heroku x - Qiita: http://qiita.com/ohbarye/items/55ec574f10685a012baf

Recommended Posts

[Pas besoin de créer un environnement local] Déployez une application de bouteille Python créée avec Cloud 9 sur Heroku
Jusqu'à ce que l'application Web créée avec Bottle soit publiée (déployée) sur Heroku
Application Web réalisée avec Python3.4 + Django (Construction de l'environnement Part.1)
Créer un environnement de développement d'applications d'apprentissage automatique avec Python
[Cloud 9] Essayez de créer un environnement avec django 1.11 de Python 3.4 sans même comprendre 1 mm
Comment déployer une application Web créée avec Flask sur Heroku
Comment créer un environnement de développement de la série Python2.7 avec Vagrant
Application Web avec Python3.3.1 + Bottle (1) - Changer le moteur de modèle en jinja2
[AWS] Version de déploiement d'application Flask qui a tenté de créer un environnement Python avec eb [Elastic Beanstalk]
Construire un environnement Mysql + Python avec docker
Apprentissage de l'historique pour participer au développement d'applications d'équipe avec Python ~ Créer un environnement Docker / Django / Nginx / MariaDB ~
J'ai essayé de créer une application todo en utilisant une bouteille avec python
Télécharger le fichier sur Cloud Storage (GCS) de GCP ~ Charger avec Python local
Comment créer un environnement d'exécution Python et Jupyter avec VSCode
[AWS] Préparation du déploiement de l'application Flask pour la création d'un environnement Python avec eb [Elastic Beanstalk]
Construisez un environnement Python + bouteille + MySQL avec Docker sur RaspberryPi3! [Construction facile]
Maintenance de l'environnement réalisée avec Docker (je souhaite post-traiter GrADS en Python
J'ai essayé de créer un environnement de développement Mac Python avec pythonz + direnv
Que faire lorsque la version Python est ancienne dans Cloud 9 créée par une autre personne
Programmation de compétition avec les paramètres de l'environnement local python
Changer l'environnement Python 64 bits en environnement 32 bits avec Anaconda
Méthode pour créer un environnement Python dans Xcode 6
Je veux créer un environnement Python
Créer un environnement Python avec Anaconda sur Mac
[Python] Une application web rapide avec Bottle!
Environnement de lancement avec LineBot + Heroku + Docker + Python
Créez un environnement virtuel pour python avec pyenv
Créer un environnement Python + OpenCV sur Cloud9
Créez un environnement Python moderne avec Neovim
Construction d'environnement AI / Machine Learning avec Python
Construisez un environnement Python + bouteille + MySQL avec Docker sur RaspberryPi3! [Essai et erreur]
Créez un environnement de développement local avec WSL + Docker Desktop pour Windows + docker-lambda + Python
[Python] Comment créer un environnement de serveur Web local avec SimpleHTTPServer et CGIHTTPServer
Comment télécharger avec Heroku, Flask, Python, Git (4)
J'ai créé une application graphique avec Python + PyQt5
Créer un environnement python avec pyenv sur EC2 (ubuntu)
Créer un environnement de développement Python avec Visual Studio Code
Créez un environnement python avec ansible sur centos6
[Python] Créer un environnement de développement Django avec Docker
Créer un environnement de construction python3 avec Sublime Text3
L'explication la plus simple au monde sur la création de LINE BOT (2) [Préparation de l'application Bot dans un environnement local avec Django de Python]
Construire un environnement Python avec OSX Elcapitan
Créez rapidement un environnement Python Django avec IntelliJ
[Introduction à l'application Udemy Python3 +] 9. Tout d'abord, imprimez avec print
De la construction d'environnement Python à la construction d'environnement virtuel avec anaconda
Créer un environnement d'apprentissage automatique Python avec des conteneurs
Créer un environnement d'exécution python avec VS Code
Exception: vous avez besoin d'un compilateur C pour générer l'erreur uWSGI en python: 3.8-alpine
[AWS] J'ai essayé de créer un environnement Python avec un environnement de développement eb [Elastic Beanstalk]
J'ai essayé de créer un environnement d'apprentissage automatique avec Python (Mac OS X)
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Comment déployer une application Django dans le cloud Alibaba
Comment télécharger avec Heroku, Flask, Python, Git (Partie 3)
Créez un environnement python pour chaque répertoire avec pyenv-virtualenv
J'ai créé un environnement Python3 sur Ubuntu avec direnv.
Comment créer un environnement Django (python) sur Docker
J'ai essayé de créer un pipeline ML avec Cloud Composer