Unicorn 0.96 doesn't play nice with Rails 2.3.5

Peter Kieltyka peter.kieltyka at gmail.com
Tue Jan 12 09:36:14 EST 2010


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



More information about the mongrel-unicorn mailing list