我添加了一个新的迁移到(现有的)gem,并且在运行 rake db:migrate 命令时,完全忽略了迁移。我尝试使用 rake db:migrate:redo VERSION = [我的迁移版本] 来强制它运行,但它报告它无法找到该版本的迁移。
我正在使用带有rails 3.1.3的ruby 1.9.2p320并且因为我直接从文件系统使用它而不应该有错误的gem版本的问题(虽然我已经尝试安装/更新通过捆绑)。
另外,我不确定在gem上定义迁移是否是正确的方法,但由于此lib与rails网站高度耦合,特别是因为它是遗留代码,所以我不会除非绝对必要,否则将其移开。
修改 gem中的迁移定义为它们通常在任何rails应用程序中定义:
gem_folder
|
|- db
... |
|- migrate
|
|- <migration files>
...
答案 0 :(得分:1)
我发现了这个问题:在gem中专门定义了一个rake任务来运行这些迁移。包括代码,以防它对其他人有用。
namespace :db do
namespace :migrate do
description = "Migrate the database through scripts in <gem name>/db/migrate and update db/schema.rb by invoking db:schema:dump. Target specific version with VERSION=x. Turn off output with VERBOSE=false."
desc description
task :admin => :environment do
ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
if Gem.searcher.find('<gem name>')
dir = "#{Gem.searcher.find('<gem name>').full_gem_path}/db/migrate/"
ActiveRecord::Migrator.migrate(dir, ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
else
raise "Unable to locate <gem name> gem to run admin migrations"
end
Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
end
end
end