Open adamakhtar opened 12 years ago
As fas as I know, a rails engine is a way to share app controllers, models, and views to other apps. In rails 3, every rails app is also engine and can be bundled as a gem as well.
There are two types of rails engines: mountable and full engine. Mountable engine is designed to be namespaced controllers, models,... For example, a forem engine, add forum to any existing rails applications. Some engines use the existing application layout (forem) or use its own layout (spree). A full engine is to augment something to an existing rails app.
Vendored plugins are deprecated in Rails 4.0, and I think people will stop using that.
http://edgeapi.rubyonrails.org/classes/Rails/Engine.html http://railscasts.com/episodes/277-mountable-engines http://www.stubbleblog.com/index.php/2011/04/writing-rails-engines-getting-started/
So Engines are a way to DRY up your apps by sharing common functionality without having to mess with the main app's code.
Engines can be considered miniature applications that provide functionality to their host applications. A Rails application is actually just a “supercharged” engine, with the Rails::Application class inheriting a lot of its behaviour from Rails::Engine.
I found few interesting links: http://edgeguides.rubyonrails.org/engines.html (I'm not sure why this page doesn't list in RailsGuides Index) http://gregmoreno.wordpress.com/2012/05/29/create-your-own-rails-3-engine/ http://stackoverflow.com/questions/6118905/rails-3-1-engine-vs-mountable-app http://www.astjohn.ca/2011/08/06/rails-31-engines-mountable-or-full-part-1 http://www.astjohn.ca/2011/08/07/rails-31-engines-mountable-or-full-part-2
I'm still not so clear what are the benefit to create full engines instead mountable engines? Because I think most of the time we need mountable engines.
Just found Ryan Bigg's talk about Engines https://vimeo.com/41952172
@samnang :+1: thanks for the video
Excellent resources everyone +1. These will be of a great help to newcomers.
@codereading/readers
Seeing as this is the first project to use Rails Engines it be a good start to understand exactly what an engine is.
How does an independent engine hook into a rails app? How does it get access to the rails apps db, params etc.
What other ways are there to create a project for rails use and how do they differ? Why would you choose one way over another?
I.e. why an engine and not just a simple gem. When should you use a vendored plugin?
Just some questions swimming in my mind.