Rails 3.1引擎迁移安装不尊重迁移时间戳



我有一个安装了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

我也有同样的问题,花了很长时间才弄清楚:如果以前的迁移的时间戳大于当前的时间戳,则新的迁移将不使用时间戳。

在我们的例子中,这是由于某人在没有使用生成器

的情况下手动创建迁移而造成的。

最新更新