我对 Heroku 的 Rails 迁移做错了什么?

What did I do wrong with my Rails migrations for Heroku?

我正在尝试添加我的 Address table 的 text 属性 作为我的 [=] 的 address 属性 17=]table,然后删除Addresstable。在 运行 heroku run rake db:migrate.

git push heroku master 之后,我在 Heroku 上执行此操作

我为数据创建新字段的第一次迁移工作正常。但是我的第二次迁移立即失败了——它说找不到 Address table。我的第三次迁移从未运行过,但它是应该删除 Address table 以整理所有内容的迁移。

我做错了什么?这些迁移在我的本地机器上工作,但在 Heroku 上失败:

1:

class AddAddressStringToBrewery < ActiveRecord::Migration
  def change
    add_column :breweries, :address, :string
  end
end

2:

class MoveAddressToString < ActiveRecord::Migration
  def change
    Address.all.each do |address|
      brewery = address.brewery
      brewery.update(address: address.text)
    end
  end
end

3:

class DropAddressTable < ActiveRecord::Migration
  def change
    drop_table :addresses
  end
end

我最好的猜测是 Heroku 正在读取我的架构并在 运行 我的迁移之前删除 table。我总是可以在单独的 git 提交中进行这些迁移以强制它工作,但我真的很想知道我哪里出错了。

谢谢!

尝试heroku run rake db:migrate更新您的生产数据库。

这是因为您的迁移文件名顺序错误。 Rails 将根据文件名的时间戳迁移文件。所以如果你想让#2 到#3 之前的运行,你必须将它重命名为#3 之前的文件名时间戳。

此外,您没有显示创建地址 table 的迁移。 table 可能不在您的生产数据库中。

我意识到我做错了什么。我通过这些迁移推送到 Heroku 也删除了我的地址模型。当我在我的本地环境中 运行 它们时,是在我清理旧地址代码之前。我将 Address 模型添加回足够长的时间以 运行 迁移,它们都 运行 很好。