[GO] Ensuite, utilisez Python (Flask) pour Heroku!

Merci. La veille Ne perdez pas contre Ruby! Comment exécuter Python (Django) avec Heroku m'a inspiré à m'inscrire. C'est kounoike.

L'article Dessiner des graphes SVG avec matplotlib avec heroku mentionne également l'introduction de Flask + heroku, mais cette fois en faisons un article sans matplotlib. .. Essayez plutôt d'utiliser MongoHQ pendant un moment.

Qu'est-ce que Flask?

Si Django est un framework web "full stack", Flask est un framework web "micro". Le noyau Flask standard ne repose que sur deux bibliothèques, le moteur de modèle Jinja2 et la boîte à outils Werkzeug WSGI. Les principales fonctionnalités qu'il fournit sont le routage, les modèles Jinja2, la fourniture de fichiers statiques et l'assistance au débogage (car je ne sais pas tout ...). Bien sûr, il existe différentes bibliothèques d'extensions Flask disponibles, vous devriez donc être en mesure de faire des choses plus élaborées.

C'est un framework très simple qui vous permet de démarrer un fichier .py dans un fichier, ce qui est utile lorsque vous souhaitez créer et publier une application Web simple.

De plus, comme vous pouvez le voir dans l'article d'hier, Django semble prendre beaucoup de temps pour livrer des fichiers statiques, mais Flask le met simplement sous statique, donc livrer js / css / img est facile.

Commençons facilement

Il est supposé que vous avez créé un compte heroku et installé Toolbelt. De plus, on suppose que pyenv et pyenv-virtualenv ont déjà été installés dans l'environnement sur Mac.

Le python de Heroku est 2.7.8 ou 3.4.1, mais ici j'ai choisi 2.7.8.

Préparation de la bibliothèque

$ mkdir heroku-qiita-advent-2014
$ cd heroku-qiita-advent-2014
$ pyenv virtualenv 2.7.8 qiita-advent-2014
$ pyenv local qiita-advent-2014
$ echo .python-version > .gitignore
$ pip install flask

Modèle, préparation d'application

app.py


#!/bin/env python
# coding: utf-8

import os
from flask import Flask, render_template

app = Flask(__name__)
app.debug = True


@app.route('/')
def index():
    return u'tester'


@app.route('/hello/<name>')
def hello(name=''):
    if name == '':
    ¦   name = u'Nanashi'
    return render_template('hello.html', name=name)


@app.route('/debug')
def debug():
    return render_template('notemplate.html')


if __name__ == '__main__':
    port = int(os.environ.get('PORT', 5000))
    app.run(port=port)

Placez le fichier modèle sous templates /. Placez également les fichiers statiques sous static /.

templates/hello.html


<html>
<head>
    <title>Hello {{ name }}</title>
</head>
<body>
    <h1>Bonjour{{ name }}M.</h1>
    <a href="http://flask.pocoo.org/"><img src="/static/img/flask.png "></a>
</body>
</html>
$ tree
.
├── Procfile
├── app.py
├── requirements.txt
├── runtime.txt
├── static
│   └── img
│       └── flask.png
└── templates
    └── hello.html

Essayons-le localement

python app.py lancera l'application sur le port hôte local 5000. Il y a / et / hello / name et / debug, alors essayons-le.

Puisque ʻapp.debug = True` est entré, une page d'erreur apparaît lors de l'accès à http: // localhost: 5000 / debug.

スクリーンショット 2014-12-07 14.05.05.png

Déployer sur heroku

Préparer un fichier pour heroku

$ pip install gunicorn
$ pip freeze > requirements.txt
$ echo python-2.7.8 > runtime.txt
$ echo web: gunicorn app:app --log-file=- > Procfile

Gérer avec git

$ git init
$ git add .gitignore
$ git add .
$ git commit -m "initial commit"

Déployer sur heroku

$ heroku login
$ heroku apps:create
$ git push heroku master

Vous pouvez voir cette application sur https://stark-forest-4893.herokuapp.com/. Veuillez saisir un nom approprié après https://stark-forest-4893.herokuapp.com/hello/.

De plus, ʻapp.debug = True` de Flask est désactivé sur heroku.

スクリーンショット 2014-12-07 14.23.55.png

Vérifiez avec la commande heroku logs.

スクリーンショット 2014-12-07 14.23.48.png

Utilisons la base de données

Comment utiliser PostgreSQL est un article en anglais, mais Flask et PostgreSQL sur Heroku Vous voudrez peut-être vous y référer (je ne l'ai jamais utilisé ...).

La raison pour laquelle je ne l'ai pas utilisé est que le niveau gratuit est limité à 10 000 lignes et que j'utilise MongoHQ. Mongo HQ est gratuit jusqu'à 512 Mo. Si vous avez beaucoup de petites données, c'est plus facile à utiliser.

Utilisez MongoHQ

Préparons diverses choses.

$ heroku addons:add mongohq
$ pip install pymongo
$ pip freeze > requirements.txt

Modifier les applications et les modèles

app.py


#!/bin/env python
# coding: utf-8

import os
from urlparse import urlparse

from flask import Flask, render_template
from pymongo import Connection


app = Flask(__name__)
app.debug = True

MONGO_URL = os.environ.get('MONGOHQ_URL')

if MONGO_URL:
    # Get a connection
    connection = Connection(MONGO_URL)
    # Get the database
    db = connection[urlparse(MONGO_URL).path[1:]]
else:
    # Not on an app with the MongoHQ add-on, do some localhost action
    connection = Connection('localhost', 27017)
    db = connection['QiitaAdvent2014']


@app.route('/')
def index():
    return u'tester'


@app.route('/hello/<name>')
def hello(name=''):
    if name == '':
        name = u'Nanashi'
    return render_template('hello.html', name=name)


@app.route('/hello2/<name>')
def hello2(name=''):
    if name == '':
        name = u'Nanashi'

    helloObj = db.hello.find_one({'name': name})
    if not helloObj:
        helloObj = {'name': name, 'count': 1}
    else:
        helloObj['count'] += 1
    db.hello.save(helloObj)

    return render_template('hello2.html', hello=helloObj)


@app.route('/debug')
def debug():
    return render_template('notemplate.html')


if __name__ == '__main__':
    port = int(os.environ.get('PORT', 5000))
    app.run(port=port)

hello2.html


<html>
<head>
    <title>Hello {{ hello.name }}</title>
</head>
<body>
    <h1>Bonjour{{ hello.name }}M.</h1>
    <h2>{{ hello.count }}C'est la deuxième fois!</h2>
</body>
</html>

https://stark-forest-4893.herokuapp.com/hello2/ compte désormais par nom. Il y a beaucoup d'omissions, mais c'est un échantillon.

Vient ensuite

Il semble qu'il soit lié à fluentd, Postgres, TreasureData par kiyoto! fluentd a été un sujet brûlant ces jours-ci. Je suis également intéressé. J'ai hâte de voir comment ceux-ci se connectent avec heroku.

Recommended Posts

Ensuite, utilisez Python (Flask) pour Heroku!
Un mémorandum pour toucher Python Flask avec Heroku
Utilisez Flask comme étape suivante dans SimpleHTTPServer
Web scraping pour les débutants en Python (1)
Web scraping pour les débutants en Python (4) -1
Utiliser DeepL avec python (pour la traduction d'articles)
[Python] Organisation de l'utilisation des instructions
Application Web facile avec Python + Flask + Heroku
Comment utiliser "deque" pour les données Python
Utilisez pathlib dans Maya (Python2.7) en préparation du prochain Python3.7
30/10/2016 else pour Python3> pour:
python [pour moi]
LINE heroku python
Comment télécharger avec Heroku, Flask, Python, Git (4)
Envelopper C avec Cython pour une utilisation à partir de Python
N'utilisez pas readlines () dans votre instruction Python for!
Jusqu'à l'utilisation de PhantomJS avec Python sur Heroku
Envelopper C ++ avec Cython pour une utilisation à partir de Python
python: utilisez votre propre classe pour numpy ndarray
À propos de Python for loop
Utilisez Thingsspeak de Python
[BigQuery] Comment utiliser l'API de BigQuery pour Python -Création de table-
[Pour les débutants] Comment utiliser la commande say avec python!
Web scraping pour les débutants en Python (1) Version améliorée
Utilisez config.ini avec Python
[Python] Utiliser JSON avec Python
Bases de Python ② pour déclaration
Utiliser fluentd de python
Utiliser des dates en Python
Flacon facile à utiliser
Utiliser Valgrind avec Python
Comment télécharger avec Heroku, Flask, Python, Git (Partie 3)
[Heroku] Mémo pour le déploiement d'applications Python à l'aide d'Heroku sous Windows [Python]
Utilisez MySQL depuis Python
Utiliser mecab avec Python 3
Utiliser le client LiquidTap Python ③
J'ai essayé python pour la première fois avec heroku
Utiliser DynamoDB avec Python
À propos de Python, pour ~ (plage)
Next Python en langage C
Manuel python pour les débutants
Refactoring des outils utilisables avec Python
Utilisez Python 3.8 avec Anaconda
Comment télécharger avec Heroku, Flask, Python, Git (Partie 1)
Utilisation méthodique du format [Python]
Utiliser python avec docker
Toolchain pour Python pour Android
Utiliser MySQL depuis Python
Utiliser le client LiquidTap Python ②
mémo heroku (pour moi)
Comment télécharger avec Heroku, Flask, Python, Git (Partie 2)
Utilisez BigQuery depuis Python.
Supprimer la journalisation des flacons python3
Utiliser le profileur en Python
Utilisez AWS SDK for Python (boto) dans un environnement Proxy
OpenCV pour les débutants en Python
Programmation avec Python Flask
Scraping Web pour débutants avec Python (4) --2 Scraping sur Cloud Shell
Installez Python (pour Windows)