4

heroku で移行を実行しようとしていますが、モデル クラスが認識されない理由がわかりません。

これは私の移行です:

class AddTestToGoals < ActiveRecord::Migration
  def change
    add_column :goals, :test, :integer, default: 0, null: false
    Goal.reset_column_information
    Goal.all.each { |g| g.update_attribute :test, Goal::PASS }
  end
end

を使用して実行する

heroku run rake db:migrate

そして、私はこのエラーが発生します

uninitialized constant AddTestToGoals::Goal

誰が問題が何であるか知っていますか?

EDIT:前にタイプミスしました。認識されないのはモデルであり、その中の定数ではありません。

半分の回避策:

これを使用して(ここで見つけました:http://visibletrap.blogspot.co.il/2011/10/heroku-access-railss-model-in-migration.html

class AddTestToGoals < ActiveRecord::Migration
  class Goal < ActiveRecord::Base; end
  def change
     add_column :goals, :test, :integer, default: 0, null: false
     Goal.reset_column_information
     Goal.all.each { |g| g.update_attribute :test, Goal::PASS }
  end
end

heroku は、問題の半分を解決する Goal が何かわからなくても文句を言いません。しかし、その後、Goal::PASS は認識されません。

4

3 に答える 3

10

古い質問ですが、設定によって自動読み込みが無効になっていることが原因で、最近似たようなことがありました

config.threadsafe!

私の environment/staging.rb ファイルにあります。以下に置き換えることで修正できます

config.threadsafe! unless $rails_rake_task

rake タスクをスレッドセーフにする必要がないため、これで問題ありません。

于 2013-01-22T20:56:45.907 に答える
0

編集:

Goal へのすべての参照を で始まるように変更し::ます。

::Goal.reset_column_information
::Goal.all.each { |g| g.update_attribute :test, ::Goal::PASS }
于 2012-07-05T22:14:15.000 に答える