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