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!


Related Articles

Do you want to use your macbook as a lap-heater?
Software Development

Do you want to use your macbook as a lap-heater?

by Jey Geethan | August 28, 2019
How many times have you felt the coldness of a meeting room and wish you had brought a heater into the room. Now you can convert your macbook into a heater

Can you have a dinner conversation around Pull Requests?
Software Development

Can you have a dinner conversation around Pull Requests?

by Jey Geethan | July 11, 2019
I believe that writing code is a way of communication and it enables developers understand better than just talking about the concepts or logic in plain english words.