Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails 3: What is the difference between an Engine and a Gem?

What is the difference between the two and when one should be used instead of the other?

like image 524
donald Avatar asked Jul 25 '11 11:07

donald


People also ask

What is an engine in Rails?

1 What are Engines? 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 behavior from Rails::Engine .

What is Mount in Ruby on Rails?

Mount within the Rails routes does the equivalent of a Unix mount . It actually tells the app that another application (usually a Rack application) exists on that location. It is used mostly for Rails Engines.


1 Answers

An Engine in rails terminology is a actually a subapplication of a web-application. For instance, something like a blog, a forum, or simple authentication: these are not full-blown applications, but pages/views/controllers/models that can be added to any rails application.

In rails2 this would be done using a plugin. Now since rails3 an engine can be packaged in a gem.

A gem is a ruby library, which can be found on http://rubygems.org and it is the standard (only) way to package and distribute ruby code to other rubyists.

So to conclude:

  • A gem: is a generic library, which can be easily installed, which are version-managed, have dependencies and such.
  • An engine: is a sub-application of a Rails application, and since Rails 3 these are distributed as a gem (which is awesome!).

So when will you use one or the other:

  • create a gem if you want to share ruby-functionality
  • create an engine (and package it in a gem) if you have parts of your rails application that can be used more generally.

Hope this helps.

like image 100
nathanvda Avatar answered Nov 24 '22 06:11

nathanvda