2011-07-07 11 views
2

私のsample_data.rakeファイルに "Diner.create!(...)"というコマンドがあり、 "uninitialized constant Diner"エラーが発生します。しかし、Railsコンソールで同じ "Diner.create!(...)"コマンドを実行すると、成功します。モデルをsample_data.rakeファイルに「必要」すると、バックトレースに "active_record/connection_adapters/abstract/connection_pool.rb:318:in retrieve_connection'"と表示されているエラー "ActiveRecord::ConnectionNotEstablished"が表示されます。レイクのモデル参照での初期化されない定数エラー

class Diner < ActiveRecord::Base 
    has_many :redemptions 
    has_many :surveys, :through => :redemptions 
end 

そして、問題の原因sample_data.rakeファイル内のコードは次のとおりです:ここに私のdiner.rbファイルがある

99.times do |n| 
    gender = rand(1) == 0 ? "male" : "female" 
    birthdate = Date.ordinal(DateTime.now.year - 13 - rand(62), rand(364)+1) 
    Diner.create!(:gender => gender, :birthdate => birthdate) 
end 

は、上記のコードを削除したファイルが正常に処理させます。そして、私が前に述べたように、上記のコードはレールコンソールで正しく動作します。

答えて

8

あなたのレーキタスクには、明らかにレール環境がありません。 あなたのタスクは、次のような構造を持っており、あなたのモデルは、すべてが問題ないはず$LOAD_PATH内にある場合:あなたはtask :populate => :environment doラインは、それが[1]、その後、あなたのタスクを実行する環境タスクを起動するために熊手を伝えていることがわかり

 namespace :yourapp do 
     desc "Create sample data" 
     task :populate => :environment do 
      # create other data 
      99.times do |n| 
      gender = rand(1) == 0 ? "male" : "female" 
      birthdate = Date.ordinal(DateTime.now.year - 13 - rand(62), rand(364)+1) 
      Diner.create!(:gender => gender, :birthdate => birthdate) 
      end 
     end 
    end 

これは、今お使いのモデルへのアクセスおよびデータベース

[1] railties-3.0.4/libに/レール/ application.rb#214

[1] railties-3.0.4/libに/レール/アプリケーションを持っています.rb#101

歓声

+0

これは私がタスクで参照した最初のモデルではありません。実際には、このタスクに先立ってレコードを受け取った4つのモデルがありました。この新しいテーブルを追加する前に、このタスクは数か月にわたって正常に完了しました。私が新しいコードを削除すると、タスクはもう一度動作します。そして、私はファイルの先頭の近くに「タスク:populate =>:environment do'」を持っています。 あなたが私にチェックしてもらえると思うことがありますか? –

+0

その '99x'ループの前にレコードを作成していますか? – krichard

+0

他の3つのモデル/テーブルでは、はい。しかし、それはそのモデル/テーブルの最初のものです。 –

関連する問題