Python + Django + Highcharts + Herokuで食べたリンゴの割合をグラフ化してみた

以前、食べたリンゴの割合をグラフ化するHerokuアプリを作りました。

 
それらの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

 

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プロジェクトのフォルダに入り、

  1. 旧アプリを、heroku rename ringo-tabetter-rb --app ringo-tabetter でリネーム
  2. Djangoアプリを、heroku rename ringo-tabetter でリネーム

とすることで、アプリ名を引き継ぐことができました。

 
なお、今後はHighcharts以外のライブラリでもグラフ表示をしようと考え、

と、URIを少し修正しました。

 

現在の様子

りんごたべたー

グラフが出てくるまで時間がかかりますが...。今後改善していきたいと思います。

 

ソースコード

GitHubに上げました。
thinkAmi/dj_ringo_tabetter

*1:Heroku toolbelt内でアップデートが走った時、NortonSONAR.Heuristic.132として「heroku-cli.exe」を削除してくれましたが...