[GO] Verwenden Sie als nächstes Python (Flask) für Heroku!

Vielen Dank. Am Tag zuvor Verliere nicht gegen Ruby! Das Ausführen von Python (Django) mit Heroku hat mich zur Registrierung inspiriert. Dies ist kounoike.

Der Artikel Zeichnen von SVG-Diagrammen mit Matplotlib mit Heroku erwähnt auch die Einführung von Flask + Heroku, aber dieses Mal machen wir es zu einem Artikel ohne Matplotlib. .. Versuchen Sie stattdessen, MongoHQ für einen Moment zu verwenden.

Was ist eine Flasche?

Wenn Django ein "Full Stack" -Webframework ist, ist Flask ein "Mikro" -Webframework. Der Standard-Flask-Kern basiert nur auf zwei Bibliotheken, der Jinja2-Template-Engine und dem Werkzeug WSGI-Toolkit. Die Hauptfunktionen sind Routing, Jinja2-Vorlagen, Bereitstellung statischer Dateien und Unterstützung beim Debuggen (weil ich nicht alles weiß ...). Natürlich stehen verschiedene Flask-Erweiterungsbibliotheken zur Verfügung, sodass Sie in der Lage sein sollten, ausführlichere Aufgaben zu erledigen.

Es ist ein sehr einfaches Framework, mit dem Sie eine .py-Datei in einer Datei starten können. Dies ist nützlich, wenn Sie eine einfache Web-App erstellen und veröffentlichen möchten.

Wie Sie dem gestrigen Artikel entnehmen können, scheint Django viel Zeit für die Bereitstellung statischer Dateien zu benötigen, aber Flask setzt sie einfach unter statisch, sodass die Bereitstellung von js / css / img einfach ist.

Fangen wir einfach an

Es wird davon ausgegangen, dass Sie ein Heroku-Konto erstellt und Toolbelt installiert haben. Außerdem wird davon ausgegangen, dass pyenv und pyenv-virtualenv bereits in der Umgebung auf dem Mac installiert wurden.

Herokus Python ist 2.7.8 oder 3.4.1, aber hier habe ich 2.7.8 gewählt.

Bibliotheksvorbereitung

$ 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

Vorlage, App-Vorbereitung

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'Prüfung'


@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)

Platzieren Sie die Vorlagendatei unter Vorlagen /. Platzieren Sie außerdem statische Dateien unter static /.

templates/hello.html


<html>
<head>
    <title>Hello {{ name }}</title>
</head>
<body>
    <h1>Hallo{{ name }}Herr.</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

Versuchen wir es lokal

python app.py startet die App auf dem lokalen Host-Port 5000. Es gibt / und / hallo / name und / debug, also lass es uns versuchen.

Da "app.debug = True" eingegeben wird, wird beim Zugriff auf http: // localhost: 5000 / debug eine Fehlerseite angezeigt.

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

In Heroku bereitstellen

Bereiten Sie eine Datei für Heroku vor

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

Mit git verwalten

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

In Heroku bereitstellen

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

Sie können diese App unter https://stark-forest-4893.herokuapp.com/ sehen. Bitte geben Sie nach https://stark-forest-4893.herokuapp.com/hello/ einen geeigneten Namen ein.

Außerdem ist Flask 'app.debug = True' auf Heroku deaktiviert.

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

Überprüfen Sie mit dem Befehl heroku logs.

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

Verwenden wir die Datenbank

Verwendung von PostgreSQL ist ein englischer Artikel, aber Flask und PostgreSQL auf Heroku Vielleicht möchten Sie sich darauf beziehen (ich habe es nie benutzt ...).

Der Grund, warum ich es nicht benutzt habe, ist, dass die kostenlose Stufe auf 10.000 Zeilen begrenzt ist und ich MongoHQ benutze. Mongo HQ ist bis zu 512 MB kostenlos. Wenn Sie viele kleine Daten haben, ist dies einfacher zu verwenden.

Verwenden Sie MongoHQ

Lassen Sie uns verschiedene Dinge vorbereiten.

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

Apps und Vorlagen ändern

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'Prüfung'


@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>Hallo{{ hello.name }}Herr.</h1>
    <h2>{{ hello.count }}Es ist das zweite Mal!</h2>
</body>
</html>

https://stark-forest-4893.herokuapp.com/hello2/ zählt jetzt nach Namen. Es sind viele Auslassungen, aber es ist ein Beispiel.

Der nächste ist

Es scheint, dass es mit fließend, Postgres, TreasureData von kiyoto verwandt ist! fließend war in diesen Tagen ein heißes Thema. Ich bin auch interessiert. Ich freue mich darauf zu sehen, wie sich diese mit Heroku verbinden.

Recommended Posts

Verwenden Sie als nächstes Python (Flask) für Heroku!
Ein Memorandum zum Berühren von Python Flask mit Heroku
Verwenden Sie Flask als nächsten Schritt für SimpleHTTPServer
Web Scraping für Anfänger in Python (1)
Web Scraping für Anfänger in Python (4) -1
Verwenden Sie DeepL mit Python (für die Artikelübersetzung)
[Python] Organisieren der Verwendung für Anweisungen
Einfache Web-App mit Python + Flask + Heroku
Verwendung von "deque" für Python-Daten
Verwenden Sie pathlib in Maya (Python2.7), um sich auf das kommende Python3.7 vorzubereiten
2016-10-30 sonst für Python3> für:
Python [für mich]
LINE Heroku Python
Hochladen mit Heroku, Flask, Python, Git (4)
Wickeln Sie C mit Cython für Python ein
Verwenden Sie in Ihrem Python keine readlines () für Anweisungen!
Bis zur Verwendung von PhantomJS mit Python auf Heroku
Wrap C ++ mit Cython zur Verwendung von Python
Python: Verwenden Sie Ihre eigene Klasse für Numpy Ndarray
Über Python für Schleife
Verwenden Sie thingspeak aus Python
[BigQuery] Verwendung der BigQuery-API für die Python-Tabellenerstellung-
[Für Anfänger] Wie man den Befehl say mit Python benutzt!
Web Scraping für Anfänger in Python (1) Verbesserte Version
Verwenden Sie config.ini mit Python
[Python] Verwenden Sie JSON mit Python
Python-Grundlagen ② für Anweisung
Verwenden Sie fließend Python
Verwenden Sie Datumsangaben in Python
Einfach zu bedienende Flasche
Verwenden Sie Valgrind mit Python
Hochladen mit Heroku, Flask, Python, Git (Teil 3)
[Heroku] Memo zum Bereitstellen von Python-Apps mit Heroku unter Windows [Python]
Verwenden Sie MySQL aus Python
Verwenden Sie Mecab mit Python 3
Verwenden Sie LiquidTap Python Client ③
Ich habe Python zum ersten Mal mit Heroku ausprobiert
Verwenden Sie DynamoDB mit Python
Über Python für ~ (Bereich)
Weiter Python in C-Sprache
Python Lehrbuch für Anfänger
Refactoring-Tools, die mit Python verwendet werden können
Verwenden Sie Python 3.8 mit Anaconda
Hochladen mit Heroku, Flask, Python, Git (Teil 1)
Methodische Verwendung im [Python] -Format
Verwenden Sie Python mit Docker
Toolchain für Python für Android
Verwenden Sie MySQL aus Python
Verwenden Sie LiquidTap Python Client ②
Heroku Memo (für mich)
Hochladen mit Heroku, Flask, Python, Git (Teil 2)
Verwenden Sie BigQuery aus Python.
Unterdrücken Sie die Python3-Kolbenprotokollierung
Verwenden Sie den Profiler in Python
Verwenden Sie das AWS SDK für Python (boto) in einer Proxy-Umgebung
OpenCV für Python-Anfänger
Programmieren mit Python Flask
Web-Scraping für Anfänger mit Python (4) --2 Scraping auf Cloud Shell
Installieren Sie Python (für Windows)