Specifying an Explicit ActiveRecord Version in Merb
June 23, 2008
Last night, I needed to make a quick update to my merb app’s schema. Nothing fancy. This is my first update since Rails 2.1 dropped with it’s improved migration naming scheme. For whatever reason rake db:migrate did not work as smoothly as it did in Rails. Since I was on a short deadline I decided to revert to ActiveRecord 2.0.2 rather than debug the actual problem. I figured this ought to be pretty trivial right?
I’m still very much a Merb newbie, but it wasn’t too hard to figure out to put this in my init.rb:
dependency "activerecord", "= 2.0.2"
As long as it appears before the use_orm line it does what it’s supposed to. Well, at least it does when you run merb start. However my problem was with rake db:migrate which now had a new problem:
I tried several solutions including requiring activesupport 2.0.2 explicitly and installing the specific gems into ./gems. Same problem. Obviously there was a problem before the Merb invocation. Turns out the Rakefile requires rubigen which in turn requires activesupport.
Okay, no big deal, just add this somewhere above rubigen in the Rakefile:
gem "activesupport", "= 2.0.2"
Now the Merb app and rake tasks work, but a quick test reveals merb-gen is now borked same as rake was. Same error, same cause. Problem is ActiveSupport is required in the very first file which is part of the official release at /usr/local/bin/merb-gen. So to actually solve this problem you need to specify the ActiveSupport version in that executable file.
At this point I’m starting to think I should have debugged the original problem and submitted a patch to fix it, but I’ve got a working fix which is what I need right now, so I duplicate the file into my working directory and add the fix.
All this has me reflecting on the difficulties of dependency management, and the value of stable public interfaces. The general case seems very hard to manage, but I can think of some solutions at the Merb level. Hmm, maybe my first Merb patch?
Specifying an Explicit ActiveRecord Version in Merb
Last night, I needed to make a quick update to my merb app’s schema. Nothing fancy. This is my first update since Rails 2.1 dropped with it’s improved migration naming scheme. For whatever reason
rake db:migrate
did not work as smoothly as it did in Rails. Since I was on a short deadline I decided to revert to ActiveRecord 2.0.2 rather than debug the actual problem. I figured this ought to be pretty trivial right?I’m still very much a Merb newbie, but it wasn’t too hard to figure out to put this in my
init.rb
:As long as it appears before the
use_orm
line it does what it’s supposed to. Well, at least it does when you run merb start. However my problem was withrake db:migrate
which now had a new problem:I tried several solutions including requiring activesupport 2.0.2 explicitly and installing the specific gems into
./gems
. Same problem. Obviously there was a problem before the Merb invocation. Turns out theRakefile
requiresrubigen
which in turn requiresactivesupport
.Okay, no big deal, just add this somewhere above
rubigen
in theRakefile
:Now the Merb app and rake tasks work, but a quick test reveals
merb-gen
is now borked same asrake
was. Same error, same cause. Problem isActiveSupport
is required in the very first file which is part of the official release at/usr/local/bin/merb-gen
. So to actually solve this problem you need to specify theActiveSupport
version in that executable file.At this point I’m starting to think I should have debugged the original problem and submitted a patch to fix it, but I’ve got a working fix which is what I need right now, so I duplicate the file into my working directory and add the fix.
All this has me reflecting on the difficulties of dependency management, and the value of stable public interfaces. The general case seems very hard to manage, but I can think of some solutions at the Merb level. Hmm, maybe my first Merb patch?