2

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

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

我想知道的是,如何检查我的本地模式和产品模式是否不同,有没有办法可以更改本地表/列以适应产品?因为它似乎只适用于生产的东西,而且我知道我的本地环境中有无用的表/列。

4

2 回答 2

7

您可以使用以下命令在 Heroku 上运行 bash 控制台:

heroku run bash -a app_name

从那里您可以使用标准 bash 命令导航文件系统,并将您的schema.rb文件与本地schema.rb.

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

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

于 2012-06-25T12:28:35.440 回答
4

rake db:schema:dump记录在 Heroku 的文件系统上不能正常工作。

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

heroku run rails runner "\"sio = StringIO.new; ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, sio); puts sio.string\"" --app [YOUR APP NAME]
于 2012-12-11T22:05:45.910 回答