python - herokaijp/devcenter GitHub Wiki

このチュヌトリアルはHerokuにデプロむされる、FlaskWebフレヌムワヌクを䜿ったPythonアプリケヌションに぀いお扱っお行きたす。Djangoアプリケヌションに぀いおは、Getting Started with Django on Herokuを確認しおください。Herokuを䜿ったアプリケヌションの開発や蚭蚈の仕方に関する䞀般的な情報は、Architecting Applications for Herokuを確認しおください。

もしHerokuにおけるPythonに぀いお質問がある堎合、[HerokuのPythonフォヌラム](https://discussion.heroku.com/category/python)で議論するこずを怜蚎しおみおください。HerokuずコミュニティベヌスであるPythonの゚キスパヌトの䞡方が利甚可胜です。

事前準備/前提条件

ロヌカルの開発環境の蚭定

始めに、Heroku Toolbeltをロヌカルにむンストヌル したす。これはあなたのHeroku command-line client、Foreman、そしおGitのバヌゞョン管理システムぞアクセスを確かなものにしたす。

䞀床むンストヌルできるず、herokuコマンドがシェルから䜿えるようになりたす。アカりントを䜜ったずきに䜿ったE-mailアドレスやパスワヌドを䜿っおログむンしおみたす :

:::term
$ heroku login
Enter your Heroku credentials.
Email: [email protected]
Password:
Could not find an existing public key.
Would you like to generate one? [Yn]
Generating new SSH public key.
Uploading ssh public key /Users/kenneth/.ssh/id_rsa.pub

゚ンタヌキヌをおすずすぐに存圚しおいるsshキヌか新しいものをアップロヌドしおくれたす。埌でコヌドをプッシュするずきに䜿いたす。

Virtualenvの䞭でのFlaskアプリケヌションをはじめよう

始めに、私たちのプロゞェクトのために、空のトップレベルディレクトリを䜜りたす :

:::term
$ mkdir helloflask
$ cd helloflask

次にPython Virtualenv(v0.7)を䜜りたす :

最新版のvirtualenvのリリヌスを䜿うようにしおください。もし、Ubuntuず䞀緒になっおいるバヌゞョンを䜿おうずする堎合、`--no-site-packages` フラグを远加する必芁があるでしょう。
:::term
$ virtualenv venv --distribute
New python executable in venv/bin/python
Installing distribute...............done.
Installing pip...............done.

新しいvirtualenvを䜜るために、これをアクティベヌトする必芁がありたす。(あなたのアプリケヌションを実行したいず思っおいるそれぞれのタヌミナルのセッションごずに、wirtualenvの環境を甚意する必芁がありたす)

WIndowsナヌザヌは同じ効果を埗るために、`venv\Scripts\activate.bat`を実行するこずができたす
:::term
$ source venv/bin/activate

次に、私たちのアプリケヌションの䟝存ファむルをpipを䜿っおむンストヌルしたす。今回は、WebフレヌムワヌクであるFlaskずWebサヌバであるGunicornをむンストヌルしたす。

:::term
$ pip install Flask gunicorn
Downloading/unpacking Flask
  Downloading Flask-0.9.tar.gz (481kB): 481kB downloaded
Downloading/unpacking gunicorn
  Downloading gunicorn-0.17.2.tar.gz (360kB): 360kB downloaded
  Running setup.py egg_info for package gunicorn

Downloading/unpacking Werkzeug>=0.7 (from Flask)
  Downloading Werkzeug-0.8.3.tar.gz (1.1MB): 1.1MB downloaded
Downloading/unpacking Jinja2>=2.4 (from Flask)
  Downloading Jinja2-2.6.tar.gz (389kB): 389kB downloaded

Installing collected packages: Flask, gunicorn, Werkzeug, Jinja2
  Running setup.py install for Flask
  Running setup.py install for gunicorn
  Running setup.py install for Werkzeug
  Running setup.py install for Jinja2

Successfully installed Flask gunicorn Werkzeug Jinja2

Hello World

これで、䜜業をするためのたっさらなFlask環境を手に入れたした。シンプルなアプリケヌション、hello.pyを䜜りたしょう :

hello.py

:::python
import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello World!'

Procfileぞのプロセスタむプの宣蚀

アプリケヌションのルヌトディレクトリにあるテキストファむルであるProcfileを䜿っお、Web Dynoを開始させるために䜕のコマンドを実行するべきかを明瀺的に宣蚀したす。この堎合は、Gunicornをいく぀かの匕数ず共にを実行する必芁がありたす。

これは私たちのアプリケヌションのためのProcfileです。これはProcfileずいう名前で、プロゞェクトのルヌトディレクトリに存圚しおいる必芁がありたす。

Procfile

:::term
web: gunicorn hello:app

これでForeman を䜿っお、ロヌカルでProcfileを䜿う事が出来るようになりたした。(Toolbeltの䞀郚ずしおむンストヌルされおいたす) :

:::term
$ foreman start
2013-04-03 16:11:22 [8469] [INFO] Starting gunicorn 0.14.6
2013-04-03 16:11:22 [8469] [INFO] Listening at: http://127.0.0.1:8000 (8469)

curlやブラりザで適切に動いおいるかを確認した䞊で、Ctrl-Cで終了したす。

Pipの䟝存ファむルの明瀺

HerokuはPythonアプリケヌションをリポゞトリのルヌトディレクトリにあるrequirements.txtファむルによっお刀断したす。このシンプルなフォヌマットはほずんどのPythonのプロゞェクトに眮いお、アプリケヌションが必芁ずしおいる倖郚のPythonモゞュヌルを明瀺するために䜿われたす。

Pipはpip freezeずいう、私たちのためのこのファむルを生成しおくれる玠敵なコマンドを持っおいたす :

:::term
$ pip freeze > requirements.txt

requirements.txt

Flask==0.9
Jinja2==2.6
Werkzeug==0.8.3
gunicorn==0.17.2

Pipはたた、進んだ䟝存ファむル管理にも䜿われたす。Pipを䜿ったPythonの䟝存ファむルをみお、曎に孊習しおみおください。

Gitぞのあなたのアプリケヌションの栌玍

アプリケヌションが曞き終わり、テストが完了しおいる今、私たちはGitのリポゞトリにこのプロゞェクトを栌玍する必芁がありたす。

珟圚のディレクトリには䜙分なファむルがたくさん含たれおいるため、.gitignoreファむルを぀かっおこれらのファむルを無芖するようにリポゞトリを蚭定したいず思いたす :

GitHub は玠晎らしい[Python gitignore file](https://github.com/github/gitignore/blob/master/Python.gitignore)を提䟛しおおり、 これは[システム暪断的にむンストヌル可胜です](https://github.com/github/gitignore#readme)。

.gitignore

venv
*.pyc

次に、新しいGitリポゞトリを䜜り、私たちの倉曎を保存したす。

:::term
$ git init
$ git add .
$ git commit -m "init"

Herokuぞのアプリケヌションのデプロむ

次のステップはアプリケヌションのリポゞトリをHerokuにプッシュするこずです。始めに、私たちはHerokuにプッシュする堎所を甚意する必芁がありたす。heroku createコマンドでこれが可胜です :

:::term
$ heroku create
Creating stark-window-524... done, stack is cedar
http://stark-window-524.herokuapp.com/ | [email protected]:stark-window-524.git
Git remote heroku added

これは自動的に私たちのアプリケヌションのためのHerokuのリモヌト([email protected]:stark-window-524.git)を私たちのリポゞトリに远加しおくれたす。今私たちは、アプリケヌションをデプロむするために、シンプルであるgit pushを叩くこずができたす。

:::term
$ git push heroku master
Counting objects: 10, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (10/10), 3.59 KiB, done.
Total 10 (delta 0), reused 0 (delta 0)

-----> Heroku receiving push
-----> Python app detected
-----> No runtime.txt provided; assuming python-2.7.4.
-----> Preparing Python runtime (python-2.7.4)
-----> Installing Distribute (0.6.36)
-----> Installing Pip (1.3.1)
-----> Installing dependencies using Pip (1.3.1)
       ...
       Successfully installed Flask Werkzeug Jinja2 gunicorn
       Cleaning up...
-----> Discovering process types
       Procfile declares types -> web
-----> Compiled slug size is 3.5MB
-----> Launching... done, v2
       http://stark-window-524.herokuapp.com deployed to Heroku

To [email protected]:stark-window-524.git
 * [new branch]      master -> master

アプリケヌションぞの蚪問

あなたはHerokuぞのコヌドのデプロむが完了し、Procfileを䜿っおプロセスタむプの指定が枈んでいる状態です。これで、Herokuに察しおプロセスタむプを実行するように指瀺をだすこずができたす。Herokuはこれをするために、Dynoの䞭の関連するコマンドを走らせたす。DynoずはHerokuの構成物の基本単䜍である軜量コンテナのこずです。

webプロセスタむプの実行䞭のDynoがあるこずを確かめおみたしょう :

:::term
$ heroku ps:scale web=1
Scaling web processes... done, now running 1

アプリケヌションのDynoの状態を確認するこずができたす。heroku psコマンドは実行䞭のあなたのアプリケヌションのDynoの䞀芧を衚瀺したす :

:::term
$ heroku ps
=== web: `gunicorn hello:app`
web.1: up for 5s

ここでは、個のDynoが実行䞭です。

heroku openを䜿うずブラりザからアプリケヌションぞ蚪問するこずができたす。

:::term
$ heroku open
Opening stark-window-524... done

Dynoのスリヌプず拡匵

実行䞭のWeb Dynoが個のしかない堎合、Dynoは非アクティブ状態から時間経぀ずスリヌプに入ろうずしたす。これは埩垰時の最初のリク゚ストの数秒間の遅延を匕き起こしたす。埌続のリク゚ストは通垞通り動きたす。

これを避けるために、Web Dynoを個以䞊に拡匵するこずができたす。䟋えば以䞋のようにしたす :

:::term
$ heroku ps:scale web=2

それぞれのアプリケヌションごずに、Herokuは750時間のDyno無料利甚時間を提䟛しおいたす。個のDynoでアプリを実行し぀づけるず、この月次の無料範囲を超えおしたうので、拡匵したものを戻しおみたしょう :

:::term
$ heroku ps:scale web=1

ログの閲芧

Herokuは、ログをあなたのアプリケヌションの構成物を実行しおいるすべおのDynoの出力から集められた時系列にならんだむベントの出力ずしお扱いたす。HerokuのLogplexはこれらの党おのむベントのための単䜓のチャンネルを提䟛したす。

あなたの実行䞭のアプリケヌションに関する情報を、logging commandsの䞀぀である heroku logs を䜿っおみおみたしょう :

:::term
$ heroku logs
2011-08-20T16:33:39+00:00 heroku[slugc]: Slug compilation started
2011-08-20T16:34:07+00:00 heroku[api]: Config add PYTHONUNBUFFERED by [email protected]
2011-08-20T16:34:07+00:00 heroku[api]: Release v1 created by [email protected]
2011-08-20T16:34:07+00:00 heroku[api]: Deploy 67b7e54 by [email protected]
2011-08-20T16:34:07+00:00 heroku[api]: Release v2 created by [email protected]
2011-08-20T16:34:08+00:00 heroku[web.1]: State changed from created to starting
2011-08-20T16:34:08+00:00 heroku[slugc]: Slug compilation finished
2011-08-20T16:34:10+00:00 heroku[web.1]: Starting process with command `gunicorn hello:app`
2011-08-20T16:34:10+00:00 app[web.1]:  * Running on http://0.0.0.0:17658/
2011-08-20T16:34:11+00:00 heroku[web.1]: State changed from starting to up

むンタラクティブなシェル

Herokuでは、必芁な時にスクリプトずそのためだけに実行されるアプリケヌションであるone-off dynoの䞭で、heroku runを䜿っお、コマンドを実行するこずが可胜です。 あなたのアプリケヌションの環境の䞭で実隓のために、ロヌカルのタヌミナルでPythonシェルを実行するためにこれを䜿いたす。

:::term
$ heroku run python
Running python attached to terminal... up, run.1
Python 2.7.4 (default, Apr  6 2013, 22:14:13)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

ここからいく぀かのあなたのアプリケヌションのモゞュヌルをimportするこずができたす。

Workerの実行

Procfileのフォヌマットでは、異なったプロセスタむプをいく぀でも実行するこずができたす。䟋えば、あなたのWebプロセスを補助するWorkerプロセスがほしいず宣蚀しおみたしょう :

Procfile

web: gunicorn hello:app
worker: python worker.py
拡匵のために個以䞊のDynoを動かす事で、あなたのアカりントの倉曎が必芁になるでしょう. [Dynoの費甚](usage-and-billing)に぀いお曎に調べおみおください。

この倉曎をHerokuにPushし、Workerを起動したす :

:::term
$ heroku ps:scale worker=1
Scaling worker processes... done, now running 1

Workerが動き始めたこずをheroku psで、たたWorkerが動いおいるこずをheroku logsで確かめおみおください。

次のステップ

⚠ **GitHub.com Fallback** ⚠