我对 Heroku 的 Rails 迁移做错了什么?
What did I do wrong with my Rails migrations for Heroku?
我正在尝试添加我的 Address
table 的 text
属性 作为我的 [=] 的 address
属性 17=]table,然后删除Address
table。在 运行 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 模型添加回足够长的时间以 运行 迁移,它们都 运行 很好。
我正在尝试添加我的 Address
table 的 text
属性 作为我的 [=] 的 address
属性 17=]table,然后删除Address
table。在 运行 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 模型添加回足够长的时间以 运行 迁移,它们都 运行 很好。