1

我正在尝试使用现有数据库制作一个新的 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 文件夹并将其与什么进行比较?

谢谢

4

1 回答 1

4

似乎为了获得运行迁移的功劳,您需要实际运行迁移。迁移,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。

于 2013-11-06T16:53:57.870 回答