如何比较Heroku Production Schema vs Local Development Schema?

时间:2012-06-25 09:01:19

标签: ruby-on-rails database ruby-on-rails-3 postgresql schema

当我尝试更改架构中的列名时,我最近遇到了错误。它在本地工作,但是当我在Heroku上迁移db:它给了我一个错误,说该列不存在。

过去,我在统一生产模式和开发模式方面做得很糟糕。这可能是因为我在本地创建了迁移,在本地运行db:migrate,然后由于某种原因在本地删除了迁移,然后推送到heroku,导致迁移在本地运行但不在prod中运行。 (我现在知道这是一件非常糟糕的事情,我应该在self.down中输入相反的函数,然后执行rake db:rollback)

我想知道的是,我如何检查我的本地和prod架构是否不同,是否有一种方法可以改变我的本地表/列以适应制作?因为它似乎只与生产的东西一起使用,而且我知道我的本地环境中没有无用的表/列。

2 个答案:

答案 0 :(得分:7)

您可以在Heroku上运行bash控制台:

heroku run bash -a app_name

您可以使用标准bash命令浏览文件系统,然后将schema.rb文件与您当地的schema.rb进行比较。

为了统一模式,我建议您阅读Rails Guide to Migrations中有关Schema转储的详细信息。您可以将模式文件复制到本地环境,然后运行`rake db:reset',这将删除开发数据库并从新模式重新创建它。请务必阅读Schema Dump详细信息,因为根据数据库的需要,有多种方法可以转储模式。显然,在开始之前备份你需要的东西。

从那时起,你应该回到干净的平板,你可以再次正确地开始迁移,以更新你的本地应用程序和Heroku。

答案 1 :(得分:4)

记录

rake db:schema:dump无法正常使用on Heroku's filesystem

您可以使用此单行程序打印在Heroku上运行的Rails应用程序的架构:

heroku run rails runner "\"sio = StringIO.new; ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, sio); puts sio.string\"" --app [YOUR APP NAME]