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

任何人都知道问题是什么?

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

一半的解决方法:

使用它(我在这里找到: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::PASS 无法识别。

4

3 回答 3

10

老问题,但我最近遇到过类似的事情,这是由于通过设置禁用自动加载

config.threadsafe!

在我的环境/staging.rb 文件中。可以通过以下方式替换它来修复

config.threadsafe! unless $rails_rake_task

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

于 2013-01-22T20:56:45.907 回答
0

编辑:

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

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

除非我遗漏了什么,否则上述所有解决方法都已在以后的 rails 版本中被阻止。但是人们仍然可以通过执行以下操作从人为施加的约束中控制他们的项目/工作:

execute("INSERT INTO table_name (col_name) VALUES (your_values_here))")
于 2020-02-24T07:56:03.187 回答