Rails Engine An awesome tool to extend your rails application Muntasim Ahmed Platform Architect @ Tasawr Interactive https://github.com/railscash [email protected]
Nov 22, 2014
Rails EngineAn awesome tool to extend your rails application
Muntasim AhmedPlatform Architect @ Tasawr Interactive
https://github.com/[email protected]
Agenda
• Why Rails Engine• What is Rails Engine• How it works with Rails Core• Who are they• Where is your interest
Problems
• Large application without reusable component• Slow testing ( if any :) )• Larger app, messy
Solution• Find common functionalities• Extract them to module => Gems• Use railtie to tie with Rails App => Rails Engine
One Thing!
Rails (version>=3.1) is just a “supercharged” engine
http://edgeguides.rubyonrails.org/engines.html
Rails Engine ?
• pre-packaged application • able to be run or mounted within another Rails
application• can have its own models, views, controllers,
generators and publicly served static files
Rails Engine ?
•
Rails Engine has
Image source: Railscasts.com
Rails Engine has
Image source: Google
Rails Engine has
Image source: Google
Rails Engine has
Image source: Google
Rails engine walk-through
• Create an engine• Implement requirements in app, lib etc.• Test• Mount to main app• Override where necessary • And done!
Rails engine walk-through
Create rails plugin new awesome_engine --mountable
Then generate mvc stuffs, test
In App Gemfilegem "awesome_engine", path => "awesome_engine_path
In App Routemount AwesomeEngine::Engine => "/awesome_engine_path", as => “awesome_engine"
Rails engine walk-through
Hit localhost:3000/awesome_engine_path (mount point)
It will hit engine's root path
Welcome to awesome engine home!
Rails engine walk-through
Routes:
Use engine routes from main app using engine_name.route_name
e.g. awesome_name.root_path
Rails engine walk-through
Routes:
Use main app routes from engine using main_app.route_name
e.g. main_app.root_path
Who are they
• Rails Admin• Devise• Blogit• Tolk• .....
References
• http://railscasts.com/episodes/277-mountable-engines• http://www.slideshare.net/AndyMaleh/rails-engine-patterns• http://www.slideshare.net/mirrec/rails-engine-rubyslava• http://edgeguides.rubyonrails.org/engines.html• http://edgeapi.rubyonrails.org/classes/Rails/Engine.html• http://pivotallabs.com/users/shagemann/blog/articles/1994-
migrating-rom-a-single-rails-app-to-a-suite-of-rails-engines
Image source:Google, Railscasts and Dulal Khan
Thanks for your attention :)
???
Question(s)