我的模型使用Rails 4插件,我在哪里进行迁移?

时间:2016-03-10 17:28:44

标签: ruby-on-rails-4

我使用我在其他两个应用程序中使用的模型创建了一个插件(gem)。

我将模型放到/ lib文件夹中,我的应用程序运行良好。但我的问题是我将在何处进行未来的迁移?我如何在gem中生成迁移?或者我必须手动编写它们吗?

1 个答案:

答案 0 :(得分:0)

要回答您的第一个问题,未来的迁移可以存储在 / lib / db / migrate / 文件夹中

来到第二部分 Rails不包含从插件调用迁移的任何内置支持。但是仍然可以通过不同的方法运行迁移

1.创建自定义佣金任务

第一种方法是使用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

端 结束

2。直接调用迁移

  Dir.glob(File.join(File.dirname(__FILE__), "db", "migrate", "*")).each do |file|
      require file
    end

3。迁移生成器

除了这些方法之外,您还可以创建自己的迁移生成器。

与其他方法相比,生成迁移有几个优点。也就是说,您可以允许其他开发人员更轻松地自定义迁移。流程如下:

  • 调用您的脚本/生成脚本并传入它们的任何选项 需要
  • 检查生成的迁移,添加/删除列或其他 必要时的选择

提供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 了解更多详情