読者です 読者をやめる 読者になる 読者になる

やりたいことを勝手にやる

プログラミング周りでやりたいことをやる

エゴサーチサービス開発 (その3)

次の目標は twitter ポーリング。heroku cron -> twitter API と進む。

Hreoku cron 設定

初期アプリ作成

とりあえず前回どおりrails init した。sqlite は heroku に入らないのでそのあたりの調整も忘れずに。

アプリ設定

アプリの設定はデフォルトなのでいろいろな設定を変更する。

アプリリネーム

Heroku コンソールでアプリをリネームした。アプリ名は世界で unique なのでかぶると "使われてるよ" と言われてリネームに失敗する。
アプリ名をリネームすると git の Heroku 側レポジトリが変わるのでドキュメントを参考にしてローカルの設定を変更した。最後は正しく変更されているかの確認。

$ git remote rm heroku
$ heroku git:remote -a newname
$ git push heroku master

変更後のアプリ URL (Mysql の設定がすんでいないからかまだエラー) :
https://search-myself.herokuapp.com/

Dyno type をアップデート (しなかった)

Dyno type が free のときは cron が使えないはずなので Dyno type を Hobby ($7/month) にアップデートする。

その前に Heroku にクレジットカード情報を登録せんとどうにもならないはず。"dashbord に行け" と言われるものの dashbord のどこを触ればいいかわからなかったが右上に見える人っぽいアイコンをクリックしたらアカウント設定に行けるのでここで課金情報を登録するらしい。

といったところでダッシュボードを見てみると

  • "Free" でも 1 worker 使える
  • "Hobby" にするとアプリと woker で 1 dyno ずつかかる (つまり 14$/month)

ということに気が付いたので ver.1.0 ができるまでは free で使うことにする。

定期実行設定

定期実行は "Heroku Scheduler" という add-on になっているらしい。

  1. アプリケーションのダッシュボードの "Resources" タブに行く
  2. "Add-ons" のところに "Scheduler" とか入力したら "Heroku Scheduler" が出てくるので選択する
  3. あらわれた "Heroku Scheduler" をクリックすると設定画面に行くので好きなように設定する
    1. 設定項目はコマンドと Dyno サイズと実行頻度 (日ごと、時間ごと、10 分ごと)

scheduler ならワーカーはなんのためにあるんだろう?⇒どうやらバックグラウンドジョブを処理するためにあるみたい。定期実行できなくはないんだろうけど、ちょっと使い方が違う。

定期実行してみる

公式ドキュメントを参考にしながらタスクの定期実行をしてみる。

定期実行タスク

タスクはなんでもよいみたいだが rails がアプリなので rake を起動タスクにする

$ rake search

テスト的に以下の rake ジョブファイルを lib/tasks/scheduler.rake においてみる。なにが起こるかは一晩寝てから確認。

desc "Test scheduled task"
task :search => :environment do
  puts "test scheduled task"
end
Gemfile 修正
  • 手元では rake が Javascript ランタイムがないために動かない
  • Heroku では therubyracer を入れると reject される

ということでローカル実行するときには therubyracer を使うことにした。
theruburacer は group :development, :test にあっても Heroku に reject されたので、ローカル実行する前にコメントアウトを外すしかなさそう。

ログ

ログは以下のコマンドで確認できるらしいが、現時点では一度も実行されていないからか scheduler のプロセスがなかった。

# scheduler のプロセスを確認
$ heroku ps
# そのプロセスのログを見る
$ heroku logs --ps scheduler.X
公式ドキュメントからの注意点
  • 長い (数分を超える) タスクは実行できない。その場合はタスクをバックグラウンドジョブにせよ
  • best-effort となる。実行時間は前後する場合があり、かつ無保証

bash for windows TIPS

  • Windows から作ったファイルは bash からは見えない
  • bash で作ったファイルを Windows で編集するのは OK

したがってファイルを追加するときには bash で touch してファイルを作成する必要がある。