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

rails runner的なことをrails runnerを介さずに直接やる

rails runner コマンドを使うと、各modelsとか、config.autoload_pathsに指定したファイルとかをロードした上でスクリプトを実行できる。

$ rails runner hoge.rb

ただ、毎回 rails runner とか書くのはだるいので、hoge.rbを独立したスクリプトにしちゃいたい。
そんなときは下みたいに書くと、rails runnerと同等の環境をロードした状態にできる。

#!/usr/bin/env ruby
require File.expand_path('../../config/application',  __FILE__)
Rails.application.require_environment!

# 以下、いつものようにスクリプトを書く

これをscript/ 以下とかに配置すればいける。

ついでにいうと、thorを組み合わせると便利な感じになる。

#!/usr/bin/env ruby
require File.expand_path('../../config/application',  __FILE__)
Rails.application.require_environment!

require "thor"

class CLI < Thor
  desc "hello", "say hello"
  def hello
    puts "hello world!"
  end
end
CLI.start

(この例だとhelloの中でrails関係のファイルを使ってないから意味ないんだけど、まあやりたいことは伝わりますよね)

$ script/hoge hello
hello world!

こんな感じでオレオレコマンドを作れるし便利。

結論

rakeでやれ