暗号通貨.py

ビットコインやブロックチェーンの技術に衝撃を受け、プログラミングの勉強を開始。現在はPythonを勉強中。

Programming

初心者がHerokuでハマったポイント

プログラミング初心者がPythonを使ってHerokuでHello, Worldするまで苦しみ抜いた記録を備忘録がてら残します。

本当に一生Hello, Worldすらできないんじゃないかと思いました。。。

Herokuとは

HerokuはPaas(Platform as a Service)の1つで、Google App Engine、Microsoft Azure、Amazon Web Serviceなどと同じくクラウドサービスを提供しています。要はアプリケーションを実行するためのプラットフォームです。

時間や要領の制限がありますが、無料で使えるのでチャレンジしました。

HerokuやPaaSについてはこの記事が詳しかったです。

PaaSの基礎知識とHerokuで開発を始める準備

余談ですが、ブロックチェーンを利用してHerokuのようなサービスを提供しようとしているStramnというスタートアップもあります。

Techcrunchに詳しくあります

StratumnはブロックチェーンのHerokuを目指す―通貨取引以外のアプリ開発にも大きなチャンス

私はこの記事を参考にさせてもらいました。

Heroku + FlaskでHello Worldする

やっていることは全く同じなので、私がハマったところやエラーになった点だけ書きます。

コード等は元記事を見てください。

開発環境

python 2.7.11(Flaskが3系に対応していないため。)

Flask==0.10.1
gunicorn==19.5.0

仮想環境については前回構築した環境で、作るつもりだったのですが、condaでエラーが起きるのでpyenv localで作成しました。

 

 

ハマったところ

①foreman startが起動しない

pythonでHerokuを動かすためには、Procfileというdynosを起動するコマンド宣言するためのファイルと、requirements.txtというファイルをディレクトリに置く必要があります。

この2つのファイルがないと、HerokuはPythonだと認識できないようです。

このProcfileは今回のように

$ echo web: gunicorn hello:app –log-file

とターミナルに打ち込むと反映されます。

Heroku Toolbeltにインストール時に自動でインストールされているforemanというコマンドを使うだけで管理してくれます。

foreman startを打ち込むと起動します。controlキー+ cで終了です。

しかし、私の場合Heroku Toolbeltをインストールしているはずなのに、なぜかforemanが起動しませんでした。

command not foundになってしまいます。

調べてみると、foremanのバージョンが最新だと動かないようです。

v0.61をgemインストールすれば解決できました。

$ gem install foreman -v 0.61

 

②Dynoが動かない。

Dynoはアプリケーションが実際に実行されるプラットフォームです。

 

Dynoが動かないとエラーになります。

エラーになる場合はProcfileに何か問題があることが多いようです。

ググっても日本語情報はあまり出てこず、苦労したポイントです。

自分は以下のようになりました。

$ heroku ps:scale web=1

Scaling dynos... !!!

▸    Couldn't find that formation.

以下のようになったら成功のようです。

Scaling dynos... done, now running web at 1:Free

web=が1だったり、2になったりするのですが、これはプランによって違うようです。

私が利用するのは無料プランなので1。

Procfileをコミットし直すといけました。

git commit -m "Procfile"

③gunicornが動作しない。

$heroku logs

でログを見れるのですが後学のため一部載せときます。

2016-05-17T13:19:16.389567+00:00 heroku[web.1]: Starting process with command `gunicorn hello:app --log-file=-`

2016-05-17T13:19:18.469848+00:00 app[web.1]: bash: gunicorn: command not found

2016-05-17T13:19:19.236913+00:00 heroku[web.1]: Process exited with status 127

2016-05-17T13:19:19.262512+00:00 heroku[web.1]: State changed from starting to crashed

2016-05-17T13:19:25.828073+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=radiant-everglades-21032.herokuapp.com request_id=14f34d45-180d-4016-aeae-beba4dacd527 fwd="4792792.2482" dyno= connect= service= status=503 bytes=

明らかにgunicornがおかしかったので、よく見るとrequirements.txtにgunicornが入っていませんでした。

$ pip freeze > requirements.txt

再度入れ直してgit commitで反映できます。

 

かなり苦労したのですが、思い返すと自分の順番が間違っていたり、冷静にログを見ると対処できる問題ばかりでした。

英語嫌いを克服しないとダメですね。

参考記事

Heroku + FlaskでHello Worldする

heroku で python 動かすチュートリアルをやったメモ

スポンサーリンク

adsense

スポンサーリンク

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin

-Programming