What are your thoughts on Engines?

Love em? Hate em? Think there are better ways?

I am looking at getting involved with an open source Rails project that is currently built using Rails Engines... and I am hesitant... mostly because I don't know enough about them and DHH doesn't like em.

What are your thoughts? Do you use them in your projects? Would you use an open-source if it was/used a Rails Engine?

Love em? Hate em? Think there are better ways?

Yes. Yes. Yes.

I am looking at getting involved with an open source Rails project that is currently built using Rails Engines... and I am hesitant... mostly because I don't know enough about them and DHH doesn't like em.

DHH writes "opinionated" software. His domain is loudthinking.org. He gave a talk to a room full of professionals that included a slide with nothing but the words "Fuck you." While Rails is great software, and saves me a lot of time, I feel no obligation to agree with or follow all of its (primary) author's opinions. Don't let DHH's loudness sway you because he's some kind of authority; take his opinions with a grain of salt and come to your own conclusions.

What are your thoughts? Do you use them in your projects? Would you use an open-source if it was/used a Rails Engine?

Engines are a terrible way to design an application. They are a great way to design a chunk of Rails (i.e. full MVC, not just library) functionality to be used in multiple apps. Note that pre-2.0 engines had a lot of hacky nastiness around them. With the way Rails 2.0.x does things, engines are much cleaner.

--Greg

Thanks greg!

"Engines are a terrible way to design an application. They are a great way to design a chunk of Rails (i.e. full MVC, not just library) functionality to be used in multiple apps."

What do you mean by this? Can you give examples of "a chuck on Rails functionality to be used in multiple apps" that would be better as a Rails engine and not a standard plugin?

Thanks greg!

"Engines are a terrible way to design an application. They are a great way to design a chunk of Rails (i.e. full MVC, not just library) functionality to be used in multiple apps."

What do you mean by this? Can you give examples of "a chuck on Rails functionality to be used in multiple apps" that would be better as a Rails engine and not a standard plugin?

Consider a product that you'll be selling to multiple clients. You sell customization of the product, and maybe a combination of products, for your client's site. So you put your products into engines, and you can put them together as necessary into a single Rails app, with extra customization in the main app, and sell it. You can also sell upgrades to the individual pieces, since they are in separate plugins (with modifications as necessary to the customization code, of course), but they can be full Rails MVC stacks.

--Greg