Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
29
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@katoy

rails console で行える処理をコマンドラインから実行する。

Rails での DB に対して、内容チェックや内容変更の操作を shell スクリプトにしようと思った。

ネットで次の情報をみつけた。
- http://stackoverflow.com/questions/10313181/pass-ruby-script-file-to-rails-console

Pass ruby script file to rails console

  1. rails console -s で、手作業で行いたい操作を実行して動作を確認する。
  2. 上で入力したスクリプトを foo.rb に記載する。
  3. コマンドラインから $ bundle exec rails runner "eval(File.read 'foo.rb')" として実行することで、 foo.rb の内容を実行して、動作を確認する。
  4. コマンドラインで実行できるようになれば、   それを shell スクリプトから実行したり、 ruby から system() や open3() で実行することができる。

例:

  • devise でユーザー管理をしている rails アプリで、 特定のユーザーを削除する処理をコマンドライン化する。
  1. $ rails console -s で
    u = User.where('username=?', 'katoy')
    => ...
    u[0].delete
    => ...
    u = User.where('usernme=?', 'katoy')
    => [] 

   として、動作を確認する。

  1. foo.rb に処理を記載する。
    u = User.where('username=?', 'katoy')
    u.each {|user| user.delete }
    puts User.where('username=?', 'katoy').size
  1. コマンドラインで実行する。
    $ bundle exec rails runner "eval(File.read 'foo.rb')"
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
29
Help us understand the problem. What are the problem?