具有现有数据库的 Rails 一直说迁移挂起



我正在尝试使用现有数据库创建一个新的rails项目。

我创建项目,配置数据库.yml,并且可以成功地执行db:schema:dump

这一切都基于我在这个网站上阅读的内容

http://blog.joelberghoff.com/2013/02/06/ruby-on-rails-tutorial-creating-a-rails-instance-from-an-existing-mysql-db/

还有其他一些。

执行转储后,我将 schema.rb 复制到 db/migrate 中,并重命名为 001_createdatabase.rb,如他的教程中所述。

一切似乎都很好。 但是我无法运行该站点,因为它告诉我我有等待迁移。 db:migrate:status 表示我创建的那个 001_createdatabase.rb。

因此,基于此:

  • 从 schema.rb 创建001_createdatabase迁移是正确的做法吗?
  • 如果是我如何让 rails 了解它不需要像已经完成的那样运行那个?
  • rails 在哪里检查它是否有挂起的迁移。 显然,它必须检查db/migrate 文件夹并将其与什么进行比较?

谢谢

似乎为了获得运行迁移的荣誉,您需要实际运行迁移。 001_createdatabase.rb,,迁移表示将带您从拥有空数据库(没有表,没有数据)到拥有数据库的第一个版本的迁移。 当您运行 rake db:migrate 时,rails 通过在schema_migrations表中查找迁移文件名的数字部分来检查 db/migrate 目录中的每个文件是否已运行。

在您的情况下,您没有运行迁移,schema_migrations表中没有条目,因此 rails 正确地认为有迁移要运行。

若要解决此问题,可以将迁移已运行的记录放入schema_migrations或实际运行迁移。 您可能需要创建schema_migrations表,rails 将根据需要创建它。

如果要运行迁移,请删除数据库(或创建一个新数据库 - 当这样做时,您可以删除旧数据库),然后将rails应用程序指向新数据库。 运行rake db:createrake db:migrate。 完成后,您应该拥有数据库的新副本,但该副本是由 rails 迁移过程创建的。 schema_migrations表的版本列中应有一条包含 1 的记录。

最新更新