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.
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.
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.
$ 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
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
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.
$ pip install gunicorn
$ pip freeze > requirements.txt
$ echo python-2.7.8 > runtime.txt
$ echo web: gunicorn app:app --log-file=- > Procfile
$ git init
$ git add .gitignore
$ git add .
$ git commit -m "initial commit"
$ 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.
Vérifiez avec la commande heroku logs
.
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.
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/
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