rails runnerとは
railsの環境を読み込んだ上で任意のrubyコードが実行できるようです。
batch処理とかの時に使えるんじゃないでしょうか。
helpを見ると以下のように使うらしい。環境も指定できて便利ですね。
% rails runner -h
Usage: rails runner [options] [<'Some.ruby(code)'> | <filename.rb>]
-e, --environment=name Specifies the environment for the runner to operate under (test/development/production).
Default: development
-h, --help Show this help message.
Examples:
rails runner 'puts Rails.env'
This runs the code `puts Rails.env` after loading the app
rails runner path/to/filename.rb
This runs the Ruby file located at `path/to/filename.rb` after loading the app
You can also use runner as a shebang line for your executables:
-------------------------------------------------------------
#!/usr/bin/env /Users/a_kubota/bitbucket/grank/rails_runner -h runner
Product.all.each { |p| p.price *= 2 ; p.save! }
-------------------------------------------------------------
rubyのコードを直接実行する方法と
rails runner 'puts Rails.env'
スクリプトファイルを指定する方法があるみたい。
rails runner path/to/filename.rb
また、shebangも書けるようです。
使ってみた。
実行するファイルを作ります。batchディレクトリを作ってその中においてみました。
myapp
├── app
├── batch
│ └── hello_batch.rb
:
hello_batch.rb
class HelloBatch
def self.execute
puts 'hello world'
end
end
HelloBatch.execute
実行結果
% rails runner batch/hello_batch.rb
hello world
できた!!
調べたところlibの下にclassを作ってそこを呼ぶのが作法のようでしたが、どこでも好きなところでいいんじゃないでしょうか。個人的にはlibだとちょっと違う気がしました。ここは個人差ありますよね。
参考
http://masa2sei.github.io/blog/2013/02/01/rails-rails-runner/
http://d.hatena.ne.jp/hrendoh/20111111/1320990987