Posted at

RailsのEngineでmigrationを幾分シンプルにする方法

More than 3 years have passed since last update.

railsでengineを利用する際に、migrationを実行する場合、

$ rake railties:install:migrations

$ rake db:migrate

RailsGuideだとこのような感じで、

一旦engine側のmigrationファイルをコピーしてから実行するというフローになっているのですが、

正直面倒だったりします。

そこで、rails db:migrate一発で済ます方法がこの記事にある通り。

ただ、これだと rake db:migrate:reset 叩いた時にengine側のmigrationが走ってくれないという問題があり、

最終的に以下に落ち着きました。

module EngineWithMigrations

class Engine < ::Rails::Engine
isolate_namespace EngineWithMigrations

initializer :append_migrations do |app|
unless app.root.to_s.match root.to_s
config.paths['db/migrate'].expanded.each do |expanded_path|
app.config.paths['db/migrate'] << expanded_path
end
ActiveRecord::Tasks::DatabaseTasks.migrations_paths = app.config.paths['db/migrate'].to_a # これがないと db:migrate:reset がうまく動かない
end
end
end
end

動作環境: ruby2.3.0, rails4.2.5