我尝试将Address
表的text
属性添加为address
表的Brewery
属性,然后删除{{ 1}}表。我在Address
之后运行git push heroku master
在Heroku上执行此操作。
我为数据创建新字段的第一次迁移工作正常。但我的第二次迁移立即失败 - 它说它无法找到heroku run rake db:migrate
表。我的第三次迁移永远不会运行,但它应该删除Address
表以整理所有内容。
我做错了什么?这些迁移在我的本地盒子上运行,但在Heroku上失败了:
Address
class AddAddressStringToBrewery < ActiveRecord::Migration
def change
add_column :breweries, :address, :string
end
end
class MoveAddressToString < ActiveRecord::Migration
def change
Address.all.each do |address|
brewery = address.brewery
brewery.update(address: address.text)
end
end
end
我最好的猜测是,在运行迁移之前,Heroku正在读取我的架构并删除表。我总是可以在个人git提交中进行这些迁移以强制它工作,但我真的很想知道我哪里出错了。
谢谢!
答案 0 :(得分:1)
这是因为迁移的文件名顺序错误。 Rails将根据文件名的时间戳迁移文件。因此,如果您希望#2在#3之前运行,则必须将其重命名为#3之前的文件名时间戳。
此外,您不会显示创建Address表的迁移。该表可能不在您的生产数据库中。
答案 1 :(得分:0)
尝试//this is already a valid javascript object
//no need for you to use JSON.parse()
var obj1 = {"name":"abcd", "details":"1234"};
console.log(obj1);
//assume you want to pass a json* in your code with an ajax request
//you will receive a string formatted like a javascript object
var str1 = '{"name":"abcd", "details":"1234"}';
console.log(str1);
//in your code you probably want to treat it as an object
//so in order to do so you will use JSON.parse(), which will
//parse the string into a javascript object
var obj2 = JSON.parse(str1);
console.log(obj2);
更新您的生产数据库。
答案 2 :(得分:0)
我意识到我做错了什么。我通过这些迁移推送到Heroku也删除了我的地址模型。当我在我的本地环境中运行它时,我才清理旧的地址代码。我将地址模型添加回来的时间足以运行迁移,它们都运行正常。