Rails迁移不能在heroku上运行,Model类报告为未初始化的常量

时间:2012-07-05 22:07:41

标签: ruby-on-rails heroku migration

我正在尝试在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

有谁知道问题是什么?

编辑:之前输入错过,它是未被识别的模型,而不是其中的常量。

HALF WORKAROUND:

使用此(我在此处找到: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不会抱怨不知道目标是什么解决了问题的一半。 但是,目标:: PASS无法识别。

3 个答案:

答案 0 :(得分:10)

老问题,但我最近经历过类似的事情,这是由于通过设置

禁用自动加载
config.threadsafe!

在我的环境/ staging.rb文件中。 可以通过以下

替换它来修复
config.threadsafe! unless $rails_rake_task

这应该没问题,因为rake任务不需要线程安全。

答案 1 :(得分:0)

编辑:

将所有对目标的引用更改为::

::Goal.reset_column_information
::Goal.all.each { |g| g.update_attribute :test, ::Goal::PASS }

答案 2 :(得分:0)

除非我缺少任何内容,否则以上所有变通办法都已在以后的rails版本中被阻止。但人们仍然可以通过执行类似的操作来从人为施加的约束中控制他们的项目/工作:

execute("INSERT INTO table_name (col_name) VALUES (your_values_here))")