naichi's lab

3日後の自分(他人)への書き置き

【Rails4】DB(ActiveRecord)へ書き込みを行うrakeタスクの作成し、heroku上で実行

突然関係ないですけどrakeって熊手のことだったんですね。

f:id:naichilab:20160712021116p:plain:w200

さて簡単なクローラ&データ閲覧サイト作れないかと色々試してます。

前回の記事rails newからherokuへのデプロイはできました。

次は定期実行するためのタスクを作ってみます。

独自のrakeタスクを定義してタスク上からDBへ書き込めればOK。

さらにそれをheroku上で実行したい。

結構簡単にできたので手順をメモ。

環境

この記事の通り作った直後の状態 blog.naichilab.com

手順

サンプル用にモデル作成

文字列を持つだけのSimpleLogってモデルを作った。

$ bundle exec rails g scaffold SimpleLog text:string
$ bundle exec rake db:migrate
$ bundle exec rails s

http://localhost:3000/simple_logsへアクセス

f:id:naichilab:20160712015010p:plain

ブラウザから登録や編集できることが確認できた。

rakeタスク作成

とりあえずrails g

$ bundle exec rails g task simplelogs

lib/tasks/simplelogs.rakeが生成される。

現在時刻をSimpleLogに書き込むようにしてみる。

namespace :simplelogs do

  desc "Generate simple log"
  task :generate => :environment do
    log = SimpleLog.new
    log.text = Time.now.strftime('%Y年%m月%d日 %H:%M:%S')
    log.save
  end

end

rakeタスク一覧にでてくるか確認

$ bundle exec rake -vT
〜〜
rake simplelogs:generate                # Generate simple log
〜〜

rakeタスク実行

普通に呼び出すだけ

$ bundle exec rake simplelogs:generate

f:id:naichilab:20160712015329p:plain

※3回実行した

入ってる。

いい感じ。

herokuへアップロードと実行

herokuはconfig/routes.rbにrootの記述がないとエラーするみたい。

  root 'simple_logs#index'

gitコミットしておく。

herokuへアップロードする

$ git push heroku master
$ heroku run rake db:migrate
$ heroku run rake simplelogs:generate
$ heroku open

f:id:naichilab:20160712020204p:plain

いい感じ〜。

収集するデータに合わせたDBを用意してゴリゴリとタスク作ればクローラ部分はできそうですね。

グラフで表示したりとか見せる部分はどうにでもなりそうだし。

次はheroku上で定期実行の設定をためしたい。

参考

morizyun.github.io