2009-02-24 21 views
5

私は私のレールから2.2アプリケーションのlibディレクトリを任意のクラスを実行しようとするたびに、『スクリプト/ランナー-e生産ClassName.run』を使用して、私は次のエラーを取得する:`const_missing ':初期化されていない定数(NameError)

/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/commands/runner.rb:47: 
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:89:in `const_missing': uninitialized constant ClassName (NameError)" 

productionの代わりにtestとして実行すると、何らかの理由でこのエラーが発生せず、すべて正常に動作します。

そうO runクラスメソッドすなわちdef self.run .... end

任意の提案ですか?

答えて

10

このエラーは、ルビがクラスまたはモジュールを見つけることができない場合に発生します。 (彼らはすべての環境で同じですか?)宝石の依存関係を確認する

  1. ClassNameは、特にモジュール、クラスとプラグインを定義して何のためのあなたのコードを検索:私はことから始めたいです。
  2. devの各プラグインを無効にすると、突然プラグインがそのエラーを引き起こしますか?
  3. コードがlibにある場合は、libをproduction.rbに追加して、libを本番環境で強制的に読み込むようにします。

希望があれば。

更新ただ、あなただけがすべての環境には、以下のいずれかを実行して、LIBのロードを確認することを考えるべきで生産にLIBをロードする場合を除き、それはオプション4.

たコメントを要約します

  1. はconfig.load_paths変数を有効にして変更することで、設定/ environment.rbの中のlibにパスを追加します
  2. それに必要とレールの初期化子(設定/初期化子下.RBファイル)を作成します。
+0

それは問題です。問題のクラスは、私がlibで定義したものです。ファイル名にクラス名を一致させるなどの単純な処理もチェックします。要するにそれが定義されています。私はそれがdevでうまく動作するので、私は何が欠けているのかわからないと テストは生産だけではない – chaostheory

+0

ああ、それは面白いです... OK生産に移動することについて物事は初期化され、テスト。 libはどこから呼び出されますか?特に、production.rbのlibにこの問題を解決する必要があるかどうかを確認してください。 – robertpostill

+0

私はちょうど私のアプリのルートから呼び出す...私は今夜これをテストするのを待つことはできません。 OMGもしこれがすごいのであれば – chaostheory

1

同じファイルに複数のクラス定義(すべてのSTIクラス)がありました。定義をそれぞれのファイルに分割すると、それは動作します。