- 更新日: 2014年5月29日
- Rails
rake コマンドで NameError: uninitialized constant エラー
rake stats コマンドで LOC と Code to Test Ratio を確認しようとしたら、表題のエラがー出ました。
1 2 3 4 5 |
$ bundle exec rake stats rake aborted! NameError: uninitialized constant SomeLibrary::APP_CONFIG |
同様の現象が $ bundle exec rake -vT など他の rake コマンドでも発生しました。APP_CONFIG は、以下のページで書いた config/settings.yml からロードするアプリケーション独自の定数です。
Rails でアプリ固有の設定情報や定数を定義する | EasyRamble
自作ライブラリで定数を呼び出していた
該当の自作ライブラリ(モジュール)を見てみますと、以下のように config/settings.yml からロードした定数を呼び出していました。
lib/some_library.rb
1 2 3 |
module SomeLibrary some_variable = APP_CONFIG["***"]["***"] ... |
rake タスクのファイルを修正
エラーメッセージのスタックトレースを遡ると、rake タスクファイルの一つが元になっていたのでそのファイルを確認。テスト用にサンプルデータを DB に流し込む rake タスクでした。確認したところ、以下のようにファイルの先頭で、上記自作ライブラリを require していました。
1 2 3 4 5 6 7 8 |
require "some_library" namespace :db do Faker::Config.locale = :en desc "Fill database with sample data" task populate: :environment do ... |
rake task ファイルで namespace の外に出していた require の行を task の中に移動。以下のように変更。
↓
1 2 3 4 5 6 7 |
namespace :db do Faker::Config.locale = :en desc "Fill database with sample data" task populate: :environment do require "some_library" ... |
とりあえずこれでエラーが出なくなりました。rake コマンドを実行する場合は、定数の呼び出しに environment の情報が必要なんだろうと思う(多分・・・。
- – 参考リンク –
- ruby – Uninitialized constant Contact (NameError) when trying to add a record – Stack Overflow
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
Leave Your Message!