Устранение конфликта версий Rack на Passenger + Bundler +RVM

October 23, 2011 bundler Passenger Ruby RVM

Последний раз для себя пишу:

Ошибка происходит при загрузке сайта и выглядит приблизительно так:

You have already activated rack 1.2.2, but your Gemfile requires rack 1.3.5. Consider using bundle exec.

От чего происходит: Passenger использует Rack еще до того, как Bundler успел загрузиться.

Суть: Passenger 3 обычно загружает Gemfile, если находит его в каталоге проекта. Но, как написано в документации Passenger Bundler support, при наличии в проекта файла config/setup_load_paths.rb, этот механизм отключается. Но в документации по использованию Passenger с RVM предлагается именно этот файл и создать – и там неявно указано, для того, чтоб Bundler работал, в этот файл нужно дописать еще две строчки.

Решение: config/setup_load_paths.rb должен выглядеть вот так:

if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm')
  begin
    rvm_path     = File.dirname(File.dirname(ENV['MY_RUBY_HOME']))
    rvm_lib_path = File.join(rvm_path, 'lib')
    $LOAD_PATH.unshift rvm_lib_path
    require 'rvm'
    RVM.use_from_path! File.dirname(File.dirname(__FILE__))
  rescue LoadError
    # RVM is unavailable at this point.
    raise "RVM ruby lib is currently unavailable."
  end
end

ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__))
require 'bundler/setup'

Buy Me a Coffee at ko-fi.com