Ruby on rails Rails pg数据库:架构迁移为空
我正试图将一个新版本的项目部署到我的登台服务器上,但数据库中的schema_migrations表却莫名其妙地为空 它现在正在尝试在部署时运行所有迁移,这会导致问题,因为其他表都存在并且完好无损 与其删除/重新创建数据库并丢失所有数据(虽然不方便,但这是一个有效的选项),是否可以在不删除的情况下生成schema_migrations表?两点:Ruby on rails Rails pg数据库:架构迁移为空,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,我正试图将一个新版本的项目部署到我的登台服务器上,但数据库中的schema_migrations表却莫名其妙地为空 它现在正在尝试在部署时运行所有迁移,这会导致问题,因为其他表都存在并且完好无损 与其删除/重新创建数据库并丢失所有数据(虽然不方便,但这是一个有效的选项),是否可以在不删除的情况下生成schema_migrations表?两点: 删除不再需要的迁移没有什么错,你不应该永远保留它们 如果必须,您可以手动更新schema_migrations表 就(1)而言,我删除了超过一个月的迁移(
schema_migrations
表db/migrate
中保留多年的混乱是毫无意义的。向下迁移然后再备份往往是一团糟,除了最近的迁移之外,所有迁移都不值得这么做;如果您需要测试旧的东西,请转储当前的开发数据库,并根据旧的schema.rb
从新数据库开始。此外,如果您确实需要旧的迁移,那么您可以随时将其从版本控制中挖掘出来,或者根据db/schema.rb
(或db/structure.sql
)的不同版本重新创建它
当然,如果您没有将db/schema.rb
保留在修订控制中,那么您就做错了,这将是一场迫在眉睫的灾难
对于(2),schema\u migrations
表非常简单:
create table schema_migrations (
version varchar not null primary key
)
因此,您可以使用psql
连接到PostgreSQL,手动创建表,然后在schema_migrations(version)值(…)中插入一组以覆盖本应在暂存环境中运行的历史迁移,然后像往常一样执行db:migrate
以更新内容。然后,您可以花尽可能多的时间进行事后检查,以了解暂存数据库的schema\u迁移发生了什么
如果您选择这条路线,如果您的Rails版本使用了ar\u internal\u metadata
表,那么您可能需要查看它
当然,在执行任何操作之前,您都将备份您的暂存数据库。您还需要检查生产数据库,以确保它没有遇到同样的问题
有时候,你必须把手弄脏才能让事情顺利进行。有多少次迁移?您可以连接到数据库并手动添加它们。