我有多个rails应用程序与同一个后端通信,我希望它们共享一些迁移
我试图创建一个文件db/migrate/my_migration.rb但在我的主要应用程序中,如果我这样做:
rake db:migrate
它不会加载它们.
在谷歌上搜索了一番之后,似乎有大约recent work条,似乎this条已经被合并到rails master.
谢谢
我有多个rails应用程序与同一个后端通信,我希望它们共享一些迁移
我试图创建一个文件db/migrate/my_migration.rb但在我的主要应用程序中,如果我这样做:
rake db:migrate
它不会加载它们.
在谷歌上搜索了一番之后,似乎有大约recent work条,似乎this条已经被合并到rails master.
谢谢
我要做的是添加一个InstallGenerator
,将迁移添加到Rails站点本身.它的行为和你提到的不太一样,但就目前而言,对我来说,它已经足够好了.
一个小指南:
首先,创建文件夹lib\generators\<your-gem-name>\install
,并在该文件夹内创建一个名为install_generator.rb
的文件,代码如下:
require 'rails/generators/migration'
module YourGemName
module Generators
class InstallGenerator < ::Rails::Generators::Base
include Rails::Generators::Migration
source_root File.expand_path('../templates', __FILE__)
desc "add the migrations"
def self.next_migration_number(path)
unless @prev_migration_nr
@prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
else
@prev_migration_nr += 1
end
@prev_migration_nr.to_s
end
def copy_migrations
migration_template "create_something.rb", "db/migrate/create_something.rb"
migration_template "create_something_else.rb", "db/migrate/create_something_else.rb"
end
end
end
end
在lib/generators/<your-gem-name>/install/templates
中添加两个包含迁移的文件,例如,使用名为create_something.rb
的文件:
class CreateAbilities < ActiveRecord::Migration
def self.up
create_table :abilities do |t|
t.string :name
t.string :description
t.boolean :needs_extent
t.timestamps
end
end
def self.down
drop_table :abilities
end
end
然后,当你的Ruby 被添加到某个应用程序中时,你就可以这样做了
rails g <your_gem_name>:install
这将增加迁移,然后你只需要做rake db:migrate
次.
希望这有帮助.