我使用我在其他两个应用程序中使用的模型创建了一个插件(gem)。
我将模型放到/ lib文件夹中,我的应用程序运行良好。但我的问题是我将在何处进行未来的迁移?我如何在gem中生成迁移?或者我必须手动编写它们吗?
答案 0 :(得分:0)
要回答您的第一个问题,未来的迁移可以存储在 / lib / db / migrate / 文件夹中
来到第二部分 Rails不包含从插件调用迁移的任何内置支持。但是仍然可以通过不同的方法运行迁移
第一种方法是使用rake任务
考虑一个例子
namespace :db do
namespace :migrate do
description = "Migrate the database through scripts in vendor/plugins/pluginname/lib/db/migrate"
description << "and update db/schema.rb by invoking db:schema:dump."
description << "Target specific version with VERSION=x. Turn off output with VERBOSE=false."
desc description
task :pluginame => :environment do
ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
ActiveRecord::Migrator.migrate("vendor/plugins/pluginname/lib/db/migrate/", ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
end
端 结束
Dir.glob(File.join(File.dirname(__FILE__), "db", "migrate", "*")).each do |file|
require file
end
除了这些方法之外,您还可以创建自己的迁移生成器。
与其他方法相比,生成迁移有几个优点。也就是说,您可以允许其他开发人员更轻松地自定义迁移。流程如下:
提供railties gem的生成器模板示例
https://github.com/rails/rails/blob/master/railties/lib/rails/generators/migration.rb
请参阅http://guides.rubyonrails.org/v2.3.11/plugins.html#migrations 了解更多详情