Ruby on Rails Engine - How To Keep Your Engine Migrations Abstracted From Your Host Rails App
Have you ever worked on building a Rails Engine and wanted to keep the models, the migrations and everything inside the engine rather than using a generator to copy paste them into your host Rails App?
Have you ever worked on building a Rails Engine and wanted to keep the models, the migrations and everything inside the engine rather than using a generator to copy paste them into your host Rails App? That's a problem everybody faces one time or the other when building Rails Engines to abstract out your huge Rails App. I have found one such solutions that can be helpful for you to keep them separate. Here is a solution for it.
Instead of using
rails g my_engine:install
to copy paste the migrations from engine to your rails app, you want to just keep the migrations inside the Rails Engine and do not bother about it.
Add the following lines to your engine, so that your engine's migration files are added to the rails app as well.
module MyEngine class Engine < ::Rails::Engine isolate_namespace MyEngine 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 end end end end
Now you can do the following from your rails app to run your migrations as you always do:
Hope it helps you! If it does help you, give me a shoutout below!