rails runnerを使ってみた

  • 104
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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