我最终成功复制了 9 个迁移。 (我认为这是因为我在我的开发和生产机器上安装/更新了 Gems 和/或引入了它们的迁移,但在这个阶段我不完全确定。)
我从生产服务器上的 rails 目录中移出一组重复的 9,但现在我想在生产中 db:migrate
以运行另一次迁移,我得到:
$ bundle exec rake db:migrate RAILS_ENV=production
[DEPRECATION WARNING] Nested I18n namespace lookup under "activerecord.attributes.checkout" is no longer supported
== CreatePages: migrating ====================================================
-- create_table(:pages)
rake aborted!
An error has occurred, all later migrations canceled:
Mysql2::Error: Table 'pages' already exists: CREATE TABLE `pages` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `title` varchar(255), `body` text, `slug` varchar(255), `created_at` datetime, `updated_at` datetime) ENGINE=InnoDB
这是因为迁移实际上已经运行。
我宁愿避免为每一个执行 db:migrate:down
和 db:migrate:up
- 我认为这将意味着生产数据库中的数据丢失. (在这种情况下,Spree 中的几个静态页面。)
有没有一种方法可以让 Rails 安装忘记所有未完成的迁移,有效地将所有未完成的迁移标记为已完成?
最佳答案
我是这样解决的:
转到冲突的迁移文件。
删除内容并保存。
运行
rake db:migrate
Ctrl+Z 文件回到之前的状态。
这是一个特例,因为我从另一个应用程序复制了数据库,并且我有冲突的迁移等等。
关于ruby-on-rails - 将 Rails 迁移标记为已迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9605700/