はじめに
tonnyです。
最近はVue.js関連の記事を書いておりましたが、今回はRailsに関して困ったことを記載したいと思います。
割と短めです。
環境
- Ruby: 2.4.1
- Ruby on Rails: 5.1.3
- Mac OS X: 10.10.5
rails runnerを使用してみる
rails runner
コマンドは、Railsでバッチ処理する際に使用します。
すでに多くの方が記事にされておりますので、簡単にまとめたいと思います。
runner (リファレンス)
バッチファイルの作成
バッチファイルを作成します。
人や組織によるかと思いますが、
lib/tasks
以下に作成することが一般的なようです。
簡単なバッチを作成します。
1 2 3 4 5 | class Tasks::Test def self.execute p 'Test' end end |
configにパスを追記
lib
はRailsで自動的にロードされないので、
config/application.rb
に追記してあげます。
1 | config.autoload_paths += Dir["#{config.root}/lib"] |
実行
これでパスに追加されたので、下記のコマンドで実行します。
1 2 | $ ./bin/rails runner "Tasks::Test.execute" Test!! |
ところが…
config
に追記しているはずなのに、いつまでたっても
uninitialized constant
のエラーが消えません。
ちなみに、
autoload_path
を確認するコマンドは下記になります。
1 | $ ./bin/rails r 'puts ActiveSupport::Dependencies.autoload_paths' |
解決方法
結論からいうと、
rails runner
コマンドの裏で動いているSpringが悪さをしていたようです。
こちらの記事を参考にさせていただきました。
rails runnerでconfig設定値が再読み込みされない問題の対処方法
1 | $ Spring stop |
詳細はよく分かっておりませんが、Spring経由で実行するとキャッシュ?されてしまうのかな、と思っています。
おまけ(runnerコマンドでバッチに引数を渡す)
あまりやらないかもしれませんが、コマンドからバッチに引数を渡す場合は、
""
で囲います。
1 | $ ./bin/rails runner "Tasks::Test.execute('hogehoge')" |
1 2 3 4 5 | class Tasks::Test def self.execute(word) p word end end |
さいごに
今回はRailsのエラーに関する備忘録になります。
私自身が困ったエラーも今後はまとめていこうと思いますので、よろしくお願いします。