Rails での DB に対して、内容チェックや内容変更の操作を shell スクリプトにしようと思った。
ネットで次の情報をみつけた。
- http://stackoverflow.com/questions/10313181/pass-ruby-script-file-to-rails-console
Pass ruby script file to rails console
- rails console -s で、手作業で行いたい操作を実行して動作を確認する。
- 上で入力したスクリプトを foo.rb に記載する。
- コマンドラインから $ bundle exec rails runner "eval(File.read 'foo.rb')" として実行することで、 foo.rb の内容を実行して、動作を確認する。
- コマンドラインで実行できるようになれば、 それを shell スクリプトから実行したり、 ruby から system() や open3() で実行することができる。
例:
- devise でユーザー管理をしている rails アプリで、 特定のユーザーを削除する処理をコマンドライン化する。
- $ rails console -s で
u = User.where('username=?', 'katoy')
=> ...
u[0].delete
=> ...
u = User.where('usernme=?', 'katoy')
=> []
として、動作を確認する。
- foo.rb に処理を記載する。
u = User.where('username=?', 'katoy')
u.each {|user| user.delete }
puts User.where('username=?', 'katoy').size
- コマンドラインで実行する。
$ bundle exec rails runner "eval(File.read 'foo.rb')"