我已经结束了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
为每一个 - 我认为这将意味着在生产数据库中的数据丢失。 (一对夫妇在这种情况下,在施普雷静态页面。)
有没有一种方法,我可以告诉这个安装的Rails忘记所有优秀的迁移,有效地标记所有未迁移的呢?
谢谢 - 这听起来像它应该做的伎俩。我会试一试。我认为我处在这种情况下,因为涉及的9次迁移在我的dev和prod机器上都创建了一次(因此,实际上相同的迁移有两次迁移,每次迁移都有自己的时间戳)。前9名运行,但我从我的开发机器拉了另外9个,因此对表格的投诉已经存在。我仍然在处理安装和更新Gems的部署方面。 – 2012-03-07 17:09:48
嗯,为什么你有重复的迁移是相同的,但具有不同的时间戳?迁移背后的想法是,你有一套每个人都使用的迁移(即对数据库结构的更改)。然后数据库有一个表来跟踪已经运行的迁移,因此它们不会在每个环境(dev/production)上运行两次。 – 2012-03-08 14:51:37
确实。我认为这可能是因为我之前在两台机器上都安装了Gems(包括它们相关的迁移),却没有意识到这一点。我需要排除工作流程。 – 2012-03-08 18:08:54