Re: plugin dependencies

Eric Anderson
Thu, 20 Sep 2007 00:28:51 -0000

Michael Koziarski wrote:
> We''re definitely not going to go down the route of a massive
> dependency system of our own.  Rubygems does this kind of thing
> already, and perhaps we just need to go down the plugins-as-gems
> approach.

I just want to add my +1 to this comment. It seems like plugins are
trying to solve all the same problems RubyGems is trying to solve. But
plugins are just doing it badly while RubyGems is doing better (not
perfect but much better).

In my mind plugins should be deprecated and eventually removed. Having a
"gem" route and a "plugin" route is just too confusing. To
me if I want
to enhance Rails to have the functionality of acts_as_paranoid then I
should just:

1. gem install acts_as_paranoid
2. Add "require acts_as_paranoid" in my environment.rb. If I care
about
binding it to a specific version of acts_as_paranoid I would instead put
"require_gem ''acts_as_versioned'',
''0.3''"

Then I''m done. This would remove a lot of code from Rails core making
it
simpler but it would give us the following benefits we don''t currently
have:

1. Distribution - yes I know "./script/plugin install blah" but it is
crappy. Requires SVN to be laid out in a non-standard way, has a flaky
way of finding the package so you pretty much always have to get the SVN
URL and has problems with some repositories (SSL, etc). Gem is quick,
simple and works.

2. Versioning - This ensures stability. The plugin route has nothing for
this other than bringing it into your own repository and then having to
use third party tools like piston to allow updates when desired.

3. Dependencies - Specifying a load order is just archane. Yes it works
but as I user of acts_as_paraniod I shouldn''t have to care if it has a
dependency. When I install acts_as_paranoid it should tell rubygems its
dependencies and all I have to do is say install with all dependencies.

4. Simplicity - No more spending hours tracking to load order dependency
problems. Reduction of Rails core code.

Eric