【问题标题】:Issue with Rails migrations PostgresqlRails 迁移 Postgresql 的问题
【发布时间】:2015-08-30 02:09:04
【问题描述】:

我对 Rails 迁移有一个奇怪的问题。 我的 db/migrate 文件夹包含迁移文件,一切正常。 但不久前,我使用rails g migration MigrationName 创建了一个新文件,它生成了一个新文件。然后,当我运行 rake db:migrate 时,它会全部回滚,并且我的架构版本变为 0。 现在,当我运行 rake db:migrate 时,它什么也不做,而 db/migrate 包含我所有的迁移。 我试过rake db:reset db:drop db:create db:migrate,但没有执行迁移。但是它说“迁移正在等待运行 rake db:migrate RAILS_ENV=development”我所做的一切都是徒劳的。

我很困惑。有人遇到过这个问题吗?

我刚刚尝试了RAILS_ENV=development rake db:migrate --trace,它返回:

** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
** Invoke db:_dump (first_time)
** Execute db:_dump
** Invoke db:schema:dump (first_time)
** Invoke environment 
** Invoke db:load_config 
** Execute db:schema:dump

跑步:

rake db:migrate:status 

给我:

database: database_development 
Status Migration ID Migration Name
--------------------------------------------------
up 000 ********** NO FILE ********** 
down 20150613120151 Devise create users 
down 20150613120734 Devise create admins 
down 20150614114949 Create gender 
down 20150614115642 Create events 
down 20150614142610 Create multi events

我尝试了很多东西: - 我删除了我的数据库,重新启动了 postgresql 并再次运行 rake db:setup db:migraterake db:migrate:status 告诉我正在等待迁移,但它不会迁移。 这让我抓狂……

编辑 我手动更新了数据库中的 schema_migrations 添加时间戳 schema:load 有效,但是当我运行 rake db:migrate 来检查它是否一切正常时,它会回滚..

编辑 如果我用时间戳手动填充数据库中的 schema_migrations 版本,当我执行 rake db:schema:status 时,它们都已启动,而我的新迁移已关闭,但如果我执行 rake db:migrate,它会尝试恢复,就好像我想运行 rake db:rollback

【问题讨论】:

  • 您好,感谢您的帮助。我不知道这个 000 迁移是什么。我也不明白。我尝试在本地机器上迁移生产环境,它可以工作。
  • 我会试试这个。但是每次我运行 rake db:create 时都会出现这个 000 迁移
  • 好吧,Rails 生成这个000 文件然后你运行db:create 似乎很正常。

标签: ruby-on-rails ruby postgresql


【解决方案1】:

所以我解决了我的问题。 事实上,我正在使用 dotenv 来管理环境变量以进行开发,并且在我的 .env 文件中我定义了一个名为 VERSION 的变量来描述 API 版本...... 那是错误! 当我删除它时,rake 能够按预期迁移。

【讨论】:

  • 我遇到了同样的问题!感谢您为我节省了一些时间。
  • 我遇到了同样的问题,并通过 unset VERSION 修复了与您相同的问题。然而,这不是一个错误。 db:migrate 使用 var VERSION 来迁移特定版本。所以在我们的例子中,它打算运行 ENV 变量中设置的特定版本。
【解决方案2】:

我不确定这是否有效,但请您尝试以下方法,

首先,删除表

rake db:drop

二、删除/移除db/schema.rb文件

三、创建数据库

rake db:create

第四,再次运行迁移

rake db:migrate

如果这对你有帮助,请告诉我,祝你好运:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2014-03-24
    • 2010-11-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2019-09-09
    相关资源
    最近更新 更多