Rails Engines are mini-applications packaged as Ruby gems that provide their own models, controllers, views, routes, and migrations.
Generating a Rails Engine Plugin
# Generate a mountable, full-stack engine with isolated namespace
bin/rails plugin new my_engine --mountable --skip-bundle
Engine Architecture
Inside lib/my_engine/engine.rb:
module MyEngine
class Engine < ::Rails::Engine
isolate_namespace MyEngine
initializer "my_engine.assets" do |app|
app.config.assets.precompile += %w[my_engine/application.css]
end
end
end
Mounting in Host Application
In the host application's config/routes.rb:
Rails.application.routes.draw do
mount MyEngine::Engine => "/blog"
end
Engine Migrations
To copy engine migrations into the parent application:
bin/rails my_engine:install:migrations
bin/rails db:migrate