Rails

rails runnerを使ってみた

More than 5 years have passed since last update.


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