rails engine :: modularize you app

Post on 22-Nov-2014

1.719 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

It contains rails engine basics, and answers of some wh question regarding rails engine

TRANSCRIPT

Rails EngineAn awesome tool to extend your rails application

Muntasim AhmedPlatform Architect @ Tasawr Interactive

https://github.com/railscashmuntasim@tasawr.com

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)

top related