Устранение конфликта версий Rack на Passenger + Bundler +RVM
October 23, 2011 in Ruby on RailsПоследний раз для себя пишу:
Ошибка происходит при загрузке сайта и выглядит приблизительно так:
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'
Понравился пост? Купи мне кофе