我对Heroku的Rails迁移有什么问题?

时间:2015-09-22 07:07:30

标签: ruby-on-rails heroku rails-migrations

我尝试将Address表的text属性添加为address表的Brewery属性,然后删除{{ 1}}表。我在Address之后运行git push heroku master在Heroku上执行此操作。

我为数据创建新字段的第一次迁移工作正常。但我的第二次迁移立即失败 - 它说它无法找到heroku run rake db:migrate表。我的第三次迁移永远不会运行,但它应该删除Address表以整理所有内容。

我做错了什么?这些迁移在我的本地盒子上运行,但在Heroku上失败了:

1

Address

2:

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

3:

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

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

谢谢!

3 个答案:

答案 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也删除了我的地址模型。当我在我的本地环境中运行它时,我才清理旧的地址代码。我将地址模型添加回来的时间足以运行迁移,它们都运行正常。