以前、食べたリンゴの割合をグラフ化するHerokuアプリを作りました。
- Ruby + Heroku + Highchartsで食べたリンゴの割合をグラフ化してみた - メモ的な思考的な
- C# + Nancy (OWIN, SelfHost, SSVE) + Dapper + Heroku + Highchartsで食べたリンゴの割合をグラフ化してみた - メモ的な思考的な
それらのHerokuアプリですが、Cedar-14がリリースされた後、Cedar-10のままだとheroku-toolbeltにて警告が出るようになりました。
Heroku | Cedar-14 now Generally Available
Cedar-14にマイグレーションすればよいのですが、Rubyの方は開発環境を再構築する必要があったり、Nancyの方はOWINの行方が気になったりと、いろいろと悩ましい状況でした。
そんな中、Linux/Windowsで動作するDjangoを触る機会があったため、Djangoの勉強がてら、Windows環境でHerokuアプリを作成・移行してみました。
環境
開発環境
Pythonパッケージ
使用しているPythonパッケージと目的は以下の通りです。
- DjangoでJinja2テンプレートを使うため
- りんご品種を書いたYAMLファイルを読み込むため
- PyYAML 3.11
- Heroku Postgresへ接続するため
- dj-database-url 0.3.0
- psycopg2 2.6.1
- TwitterAPI用
- tweepy 3.4.0
- ローカルでのTwitter API Keyの設定用
- Twitterのcreated_atにTimezoneを持たせるため
- pytz 2015.4
- Herokuでの動作用
- gunicorn 19.3.0
- Windowsでは動作しないので、Heroku上のみ
- whitenoise 2.0.3
- gunicorn 19.3.0
Herokuアドオン
- Heroku Postgres
- Heroku Scheduler
Djangoへの入門
アプリコードを書き始める前に、以下のDjango入門をひと通り写経しました。 Python Django入門 (1) - Qiita
イチから入門するには、このくらいのサイズがちょうどよかったです。ありがとうございました。
Djangoプロジェクトの構成
1つのDjangoプロジェクトに、
- api
- highcharts
- tweets
の3アプリを作成しました。
また、Heroku Scheduler
アドオンで一日一回りんごツイートを収集するよう、tweetsアプリの中にmanage.pyから呼べる management/commands/gather_tweets.py
を作りました。
なお、Twitter APIではツイートの読み取りしかしないことから、以前とは異なりApplication-only authenticationを使いました。これにより、Consumer KeyとConsumer Secretのみで動作するようになりました。
移行について
Heroku Postgres
前回のエントリのような感じでデータを移行しました。
Python + peeweeを使って、Heroku Postgresに接続する - メモ的な思考的な
アプリ名の変更
新しく作るにあたりアプリ名をどうしようかと考えましたが、旧バージョンのものが停止してしまうことから、アプリ名も引き継ごうと考えました。
そのため、以下を参考にアプリ名の変更を行うことにしました。
herokuアプリケーションの名前を変更する - Qiita
VM環境のアプリ名変更はできるのかなと思いましたが、heroku auth:login
しておけば、VM環境でなくてもVM環境のアプリ名称が変更できました*1。
これで作業がサクサク進む! 開発・運用でよく使うherokuコマンドリファレンス (1/3):CodeZine(コードジン)
作業としては、Djangoプロジェクトのフォルダに入り、
- 旧アプリを、
heroku rename ringo-tabetter-rb --app ringo-tabetter
でリネーム - Djangoアプリを、
heroku rename ringo-tabetter
でリネーム
とすることで、アプリ名を引き継ぐことができました。
なお、今後はHighcharts以外のライブラリでもグラフ表示をしようと考え、
と、URIを少し修正しました。
現在の様子
グラフが出てくるまで時間がかかりますが...。今後改善していきたいと思います。
ソースコード
GitHubに上げました。
thinkAmi/dj_ringo_tabetter