On 2010-01-11, at 10:42 PM, Eric Wong wrote:
> Peter Kieltyka <peter.kieltyka at gmail.com> wrote:
>> Hello,
>>>> I've experienced a bug while trying to setup Unicorn 0.96.0 with my
>> Rails 2.3.5 app. Some details on my system: I'm running Freebsd 8.0-p2
>> (amd64) with Ruby 1.9.1 and Rubygems 1.3.5.
>>>> Pretty much, I tried running "unicorn_rails" in the root of my rails
>> application, but it never loads. What happens is the master process
>> load then it keeps trying to start the worker app but fails. I kept
>> getting the message that I need to install Rails 2.3.5. At fist I
>> thought I had configured something incorrectly and there was a bad
>> reference to my gems, but no. The error message came from my Rails
>> config/boot.rb file which is called after the gem list has been
>> refreshed (via app.call in Unicorn). I traced through unicorn until I
>> found that in the load_rails_gem method of the GemBoot class was
>> raising the load error. When checking the exception message variable
>> it told me:
>>>> $ unicorn_rails
>> I, [2010-01-11T16:20:11.330566 #23391] INFO -- : listening on addr=0.0.0.0:8080 fd=3
>> I, [2010-01-11T16:20:11.337793 #23391] INFO -- : worker=0 spawning...
>> I, [2010-01-11T16:20:11.339090 #23391] INFO -- : master process ready
>> I, [2010-01-11T16:20:11.339225 #23393] INFO -- : worker=0 spawned pid=23393
>> I, [2010-01-11T16:20:11.379570 #23393] INFO -- : Refreshing Gem list
>> Missing the Rails 2.3.5 gem. Please `gem install -v=2.3.5 rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.
>> I, [2010-01-11T16:20:11.446208 #23391] INFO -- : reaped #<Process::Status: pid 23393 exit 1> worker=0
>> I, [2010-01-11T16:20:11.446461 #23391] INFO -- : worker=0 spawning...
>> I, [2010-01-11T16:20:11.447539 #23394] INFO -- : worker=0 spawned pid=23394
>> I, [2010-01-11T16:20:11.488722 #23394] INFO -- : Refreshing Gem list
>> Missing the Rails 2.3.5 gem. Please `gem install -v=2.3.5 rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.
>> ... etc. ... keeps going on and on and on.
>>>> The exception message in GemBoot tells me:
>>>> can't activate rack (~> 1.0.0, runtime) for ["actionpack-2.3.5",
>> "rails-2.3.5"], already activated rack-1.1.0 for ["unicorn-0.96.0"]
>>>> So, I uninstalled rack 1.1.0, leaving behind just rack 1.0.1. Started
>> up the unicorn_rails again and voila. The issue seemed to be a
>> conflict with the rack 1.1 already being loaded by Unicorn, and when
>> Rails begins to load and checks its dependencies, the rack version is
>> too new for 2.3.5.
>>>> I'm not sure what the fix is here, but uninstalling rack 1.1 probably
>> is not the answer.
>> Hi Peter,
>> Uninstalling Rack 1.1 may be the best answer, especially
> if you don't need Rack for anything else.
>> There are several problems at hand:
>> 1. Rails 2.3.5 declares it is only compatible with Rack 1.0.x
> 2. Unicorn does not require any particular Rack version
> 3. RubyGems defaults to the latest version of any Gem if
> no version is explicitly specified.
>> Since Unicorn is loaded before Rails, RubyGems will default to
> loading the latest version of Rack based on the Unicorn gemspec
>> You have several other options here to work around this,
> they all suck (in no particular order of suckiness):
>> 1. edit the installed Rails/active* gemspecs[1] so they're not
> pinned on on 1.0.x anymore (they *should* be compatible enough)
>> 1a. vendorize Rails/active* and edit the gemspecs there
>> 2. edit your copy of /path/to/unicorn_rails and
> activate Rack 1.0.x in there before Unicorn is activated
> (this is the "unicorn_rails" wrapper RubyGems creates for you,
> not the actual "unicorn_rails" source).
>> 3. create a "vendored" copy of unicorn_rails for your
> application (script/my_unicorn) and activate Rack 1.0.x
> in there first.
>> 4. install Unicorn using setup.rb without RubyGems
> (uninstalls/upgrades won't be as nice to deal with, though).
>> 5. edit the installed Unicorn gemspec[1] to depend on Rack ~> 1.0
>>> [1] - RubyGems gemspecs are here:
> $prefix/lib/ruby/gems/$RUBY_VERSION/specifications/*.gemspec
>> --
> Eric Wong
Hey Eric,
Thanks for the quick reply.
That is pretty much what I expected. I plan to begin experimenting with Rails 3 for this project in any regards but I thought I'd bring it to your attention if others have the same issue (which some already did acknowledge it on #rubyonrails at irc.freenode.net).
Strange though, on my OSX 10.6 system with the same setup (Ruby 1.9.1, Gems 1.3.5, Rack 1.1.0 & 1.0.1, and Unicorn 0.96.0) the issue doesn't come up. Ohh well..
Peter