今日学んだこと

読書感想文とか、勉強した内容とか

無料で作るWebサービス Herokuを使ってWebサービスを作ってみた(後編)

前回の続きです。

無料で作るWebサービス Herokuを使ってWebサービスを作ってみた(前編) - 今日学んだこと

 作ったアプリをherokuに上げます

なお、参考にしたのはこちら

Getting Started with Django on Heroku | Heroku Dev Center

heroku toolbeltのインストール

僕が試している環境はubuntuなのでubuntuでのやりかたですが、macでも変わらないと思います。

$ wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh

 で、heroku使うためのツールがインストールされます。gemから入れるのが一般的っぽいんだけど、うまく動かなかったのでこちらで。マジruby嫌い・・・

環境の吐き出し

Djangoのmanage.pyがあるディレクトリに移動し、

$ pip freeze > requirements.txt

で、必要なAPIが吐き出され、herokuが知ることができます。

Gitのcommit

サーバーに対してではなく、ローカルに対してcommitします。

$ git init
$ git add .
〜ここで、.gitignoreに*.pycを登録〜
$ git commit -m "first commit"

 でOK

Herokuに登録

Herokuのアカウントはすでに作成している前提です。heroku createコマンドを実行すると、ユーザー名としてのメールアドレス、パスワードを聞かれます。正しく入力すると、gitの内容がherokuに登録されます。

$ heroku create
Enter your Heroku credentials.
Email: xxxxx@mailaddress.com
Password (typing will be hidden): 
Creating fast-savannah-1531... done, stack is cedar
http://fast-savannah-1531.herokuapp.com/ | git@heroku.com:fast-savannah-1531.git
Git remote heroku added

 Herokuにcommit

commitする前に、herokuにssh鍵を登録する必要がありました。僕はこちらを参考にしてうまくいきました。

Heroku で git push で Permission denied (publickey). のエラーが発生した。 - u16suzuの blog

無事ssh鍵を登録したら

$ git push heroku master

で、ソース達がherokuに飛んでいきます。

こんな感じになりました!

http://studysuggest.herokuapp.com

f:id:nakazye:20140915012259p:plain

トラブルシューティング

僕がはまった罠達です

Pythonのバージョン指定

runtime.txtというファイルを用意してあげて、

python-3.3.2

 と中に記載してあげる必要がありました。

STATIC_ROOTの指定

Django and Static Assets | Heroku Dev Center

に従って、settings.pyとwsgi.pyを修正する必要がありました。

また、追加しただけだと

FileNotFoundError: [Errno 2] No such file or directory: '/app/suggestStudy/static'

と怒られたので、

echo dummy > suggestStudy/static/dummy

としてディレクトリ&ファイルを作成しました。

Procfileの作成

herokuがどうやってプリケーションを起動するか、Procfileとして作成してあげる必要がありました。内容はこんな感じで

web: python manage.py runserver 0.0.0.0:$PORT --noreload

 まとめ

何かを学ぶにあたり、一番大事なのは実際に手を動かすこと、システムで言えば作って、公開することだと思ってます。

不恰好でも動くものを作り、公開し、フィードバックをもらい、もしくはフィードバックが無いことに対する対策を考え、より目標に対する完成度を上げていく。

そんな時、無料で気軽に使えるherokuというのは強い味方になるんじゃないかなと思いました。