Ruby on Rails Engine - How To Keep Your Engine Migrations Abstracted From Your Host Rails App

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?
Software Development
by Jey Geethan | January 16, 2019

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.


Problem Statement:

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.


Solution: 

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:

   rake db:migrate

Hope it helps you! If it does help you, give me a shoutout below!


Jey Geethan

Jey Geethan is a poet, author and an entrepreneur.


Related Articles

Software Development

Why Microservices?

by Jey Geethan | December 16, 2022
Why Microservices?
I have a few tidbits about why to use microservices and why it makes sense to create few microservices as a side project and learn from the same
Software Development

Ruby Tips - How to figure out where a method is defined

by Jey Geethan | August 12, 2018
Ruby Tips - How to figure out where a method is defined
The other day when I was dabbling with the huge codebase, I was wondering where a particular method was being declared for a specific method