【问题标题】:after postgres import from heroku, rails locally imposes to run database migration从heroku导入postgres后,rails在本地强制运行数据库迁移
【发布时间】:2019-06-14 05:55:07
【问题描述】:

我正在尝试将我的数据库从 heroku 导入回本地。按照heroku 上的命令,我可以在本地导入整个数据库。

但是,Rails 回答说我有一个未决的迁移,我应该运行 bin/rails db:migrate RAILS_ENV=development。那失败了,因为表已经存在。

在heroku上:

heroku pg:info --app my_app
 ›   Warning: heroku update available from 7.22.7 to 7.24.4.
=== DATABASE_URL
Plan:                  Hobby-dev
Status:                Available
Connections:           0/20
PG Version:            11.2

地区:

psql (PostgreSQL) 11.3

ActiveRecord::Migrator.current_version 返回 => 20190608070435 db/schema.rb 包含:

ActiveRecord::Schema.define(version: 2019_06_10_061746)

用 ActiveRecord::Migrator.current_version 提供的版本替换该版本也无济于事。

不知道这个问题是从哪里来的。从 Heroku 导入后,我在本地拥有正确的数据库,但 rails 看到一个待定的迁移。

【问题讨论】:

    标签: ruby-on-rails postgresql heroku


    【解决方案1】:

    Rails 使用schema_migrations 表来跟踪迁移。当缺少相应的迁移记录并且 rails 尝试运行迁移时,可能会发生此问题。但它失败了,因为您已经在本地数据库中拥有该表。

    如果您确定本地拥有最新/最新的数据库,您可以做的一件事是运行迁移,但注释掉代码(即在迁移中)。注意:确保您只评论表创建代码

    例如

    class <your migraton name> < ActiveRecord::Migration[4.2]
      def change
        # commented out code
      end
    end
    

    这样,Rails 会将schema_migrations 表更新为正确的版本,并且不会再唠叨你(Rails 假设你已经创建了表)。

    然后取消注释迁移文件。

    【讨论】:

    • 这行得通。尽管在每次导入时从多个文件中注释掉代码块有点麻烦。没有永久的解决方案吗?
    • 嗨@thiebo,这根本不是一个永久的解决方案。这只是为了让你跑步。如果您经常收到此错误(理想情况下您不应该这样做),您将不得不重新访问您的部署工作流程并找出发生这种情况的原因
    猜你喜欢
    • 2015-09-10
    • 1970-01-01
    • 2011-02-25
    • 2021-10-16
    • 1970-01-01
    • 2023-03-05
    • 2020-11-07
    • 2015-09-11
    • 2021-09-25
    相关资源
    最近更新 更多