こんにちは。たなか(@tanaka_ricecake)です。
Ruby on RailsでWebアプリケーションサービスの開発をしています。
開発中以下のようなエラーに遭遇したので、内容と解決方法をご紹介します。
もくじ
症状
タイトルのエラー内容
rails runner実行時に以下のエラー
# rails runner Tasks::Xxxx.execute
Please specify a valid ruby command or the path of a script to run.
Run 'bin/rails runner -h' for help.
uninitialized constant Tasks::Xxxx
rails runnerが作動しません
確認してみたこと
横並びで似たようなコマンドを確認
$ bundle exec rails runner Tasks::Xxxx.execute
# bin/rails runner Tasks::Xxxx.execute
結果は同じでした。
環境確認
バージョンは以下の通り
# rails -v
Rails 5.1.6.1
調査していると「productonモードだとrails runnerが動作しない!」みたいな事例も散見されたので開発モードも一応確認。
# rails c
Loading development environment (Rails 5.1.6.1)
[1] pry(main)> Rails.env
=> "development"
普通にdevelopmentです。
文言を細かく変更してトライ
module => class にしてみたり、::をつけみたりみなかったり、過去のプロジェクトでの成功例を参考にああでもないこうでもないと書き直して見ましたが、内容が変わりません。
autoloadは設定されているか?
lib配下のファイルを読み込むためにはapplication.rbにautoload_pathの追記が必要になります
config.autoload_paths += Dir["#{config.root}/lib"]
上記を追加してみましたが、なお改善せず……なぜだーーー!
解決方法
何やっても微動だにしない……どうすればと打ちひしがれている時に、ふと気付きました。
lib/tasks/xxx_inport.rb
class Tasks::Xxx_import
end
ファイル名 => xxx_inport.rb
クラス名 => Tasks::Xxx_import
“inport”でタイポしてるーーーーーーーーー!!!!!!
(修正したら無事読み込みました。本当にありがとうございました)
まとめ
恥ずかしいっす。自分。
散々あーでもないこーでもないやって騒ぎ立てて、オチがタイポなんて最低です。
『エンジニアのハマり時間とその技術的難易度の相関関係』なんて記事が以前話題になってましたが、まさにこのパターンで終わってみればしょーもないやーつでしたね。
醜態を晒してしまいましたが、まあrails runner関連で色々学べたんで結果オーライってことで。
今回はここまで。お疲れ様でした。