Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

What are engines? #4

Open
adamakhtar opened this issue Aug 30, 2012 · 7 comments
Open

What are engines? #4

adamakhtar opened this issue Aug 30, 2012 · 7 comments

Comments

@adamakhtar
Copy link
Member

@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.

@chamnap
Copy link
Member

chamnap commented Aug 30, 2012

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.

@agis
Copy link

agis commented Aug 30, 2012

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.

@samnang
Copy link
Member

samnang commented Sep 2, 2012

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.

@samnang
Copy link
Member

samnang commented Sep 2, 2012

Just found Ryan Bigg's talk about Engines https://vimeo.com/41952172

@orlando
Copy link

orlando commented Sep 3, 2012

@samnang 👍 thanks for the video

@adamakhtar
Copy link
Member Author

Excellent resources everyone +1. These will be of a great help to newcomers.

@agis
Copy link

agis commented Sep 25, 2012

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants