我有一个安装了3个引擎的Rails应用程序。每个引擎都有自己的数据库迁移,迁移的命名时间戳可以追溯到2010xxxxxx-migration-name.rb。在我运行bundle exec rake railties:install:migrations
之后,所有迁移都复制到我的应用程序db/migrate,但迁移的时间戳不被尊重,它们都被重新命名为2011xxxx-migration-name.rb。任何想法?
迁移被自动重命名,以使它们不与应用程序中的迁移冲突。它们将在一个内聚的迁移系列中组合在一起,而不是在您的应用程序中分开。
我们今天在升级一个使用pre - rails 3.1引擎的旧rails应用时遇到了这个问题。这个引擎使用的是lazyatom的旧引擎插件
这个引擎插件自带了自己的迁移器类,没有将迁移文件复制到apps的db/migrate
文件夹中。
如果现在使用rake任务将插件文件安装到应用程序中,时间戳得到更新,rake db:migrate
尝试再次运行所有旧的迁移。
简单解决办法:
通过rsync
复制所有旧的迁移到db/migrate
文件夹,而不使用rake任务:
rsync -ruv FULL_ENGINE_PATH/db/migrate RAILS_APP_PATH/db
对于所有来自pre - rails 3.1次的引擎开发人员:
我们在引擎中添加了一个升级rake任务来处理这个问题。所以我们的用户可以很容易地运行:
rake alchemy:upgrade
我也有同样的问题,花了很长时间才弄清楚:如果以前的迁移的时间戳大于当前的时间戳,则新的迁移将不使用时间戳。
在我们的例子中,这是由于某人在没有使用生成器