具有现有数据库的 Rails 一直说迁移未决
Posted
技术标签:
【中文标题】具有现有数据库的 Rails 一直说迁移未决【英文标题】:Rails with existing database keeps saying migration pending 【发布时间】:2013-11-06 16:19:35 【问题描述】:我正在尝试使用现有数据库创建一个新的 Rails 项目。
我创建了项目,配置了 database.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 文件夹并将其与什么进行比较?谢谢
【问题讨论】:
【参考方案1】:看来,为了获得运行迁移的功劳,您需要实际运行迁移。迁移001_createdatabase.rb,
表示将带您从空数据库(没有表,没有数据)到拥有数据库的第一个版本的迁移。当您运行rake db:migrate
时,rails 通过在 schema_migrations 表中查找迁移文件名的数字部分来检查 db/migrate 目录中的每个文件是否已运行。
在您的情况下,您没有运行迁移,schema_migrations 表中没有条目,因此 rails 认为,正确地,有一个迁移要运行。
要解决此问题,您可以将已运行迁移的记录放入 schema_migrations 或实际运行迁移。您可能需要创建 schema_migrations 表,rails 会根据需要创建它。
如果你想运行迁移,要么删除你的数据库(或者创建一个新的——你可以删除旧的),然后将你的 Rails 应用程序指向新的数据库。运行rake db:create
和rake db:migrate
。完成后,您应该拥有数据库的新副本,但该副本是由 rails 迁移过程创建的。 schema_migrations 表应该有一条 version 列为 1 的记录。
【讨论】:
谢谢。布局很好:)以上是关于具有现有数据库的 Rails 一直说迁移未决的主要内容,如果未能解决你的问题,请参考以下文章