おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

script/runnerでのバッチファイル実行を短く書く

これまでrails上でのバッチ処理はscript/runnerを使って以下のようなコマンドで実行していました。

script/runner "eval(IO.readlines('hoge.rb').join)"

でもこれ長いですよね。もっと短くする方法はないかなーと思ってscript/runner --helpしたら「こんな書き方もできるよ」とのこと。

#!/usr/bin/env /path/to/script/runner
Product.find(:all).each { |p| p.price *= 2 ; p.save! }

shebangにscript/runnerまでのパスを指定すると、それ以下のスクリプトをrunner環境で実行してくれるみたいです。これにより、たとえば上記のファイルをscript/product_findとしたら

script/product_find

で実行できるようになります。

環境ごとにshebangを書き換えなきゃいけないのがちょっと面倒だけど、これで少し楽になったかなー

追記

id:rryuさんにコメントいただいて調べたら

script/runner hoge.rb

で動きますね。いつからこんな書き方できるようになったんだろ。