Chapter 17. Engines
This chapter covers
- The importance of engines for Rails 3
- Building a new engine and exploring the base
- Using behavior-driven development to develop an engine
- Releasing the engine as a gem
- Integrating an engine with an app
Engines are a new feature for Rails 3.[1] They are effectively miniature applications that provide additional functionality to an application, and they function in much the same way as an application.
1 Although in previous versions they were supported by a plugin written by the community: https://github.com/lazyatom/engines.
Back in chapter 6, you used the Devise gem, which itself is an engine. Other engines include the RailsAdmin[2] and forem[3] engines.
An engine allows you to share common functionality across applications in the form of a gem or a plugin.[4] This functionality could be an authentication system such as Devise, a commenting engine, or even a forum engine. If there’s ever been a need to have the same features across an application, this is what engines were made for.
4 In Rails 3, these two are basically interchangeable. One lives in vendor/plugins, the other is installed using gem. For all intents and purposes, they work in a near-identical manner. Developers should try to use gems where possible, as they are versioned and easy to upgrade to specific versions, where plugins are not.