Путаница в пути компоновщика - PullRequest
0 голосов
/ 15 февраля 2012

Я открыл выделенную учетную запись хостинга на DreamHost. Я развернул приложение rails для этого. Я получил следующую ошибку.

You have already activated rack 1.2.1, but your Gemfile requires rack 1.3.6. Using bundle exec may solve this.

Я проверил версию.

$ gem list -d rack

rack (1.2.1, 1.1.0, 1.0.1, 1.0.0)
    Author: Christian Neukirchen
    Rubyforge: http://rubyforge.org/projects/rack
    Homepage: http://rack.rubyforge.org
    Installed at (1.2.1): /usr/lib/ruby/gems/1.8
                 (1.1.0): /usr/lib/ruby/gems/1.8
                 (1.0.1): /usr/lib/ruby/gems/1.8
                 (1.0.0): /usr/lib/ruby/gems/1.8

Стойки 1.3.6 там нет. Но когда я проверил это с "bundle show", это уже установлено. (На самом деле я сделал "комплектную установку - развертывание")

$ bundle show rack
/.../my_rails_app_root/vendor/bundle/ruby/1.8/gems/rack-1.3.6

И у меня есть 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'

На самом деле я нашел решение. Просто "gem install rack -v 1.3.6" устранил проблему.

Но почему пассажир берет драгоценность стойки системы (или стойку пользователя) вместо драгоценности стойки комплекта? Как избежать этой проблемы?

Спасибо.

Sam

1 Ответ

0 голосов
/ 03 апреля 2012

Обычно это то, что вы получаете, когда запускаете свое приложение (например, rails server ) без префикса команды с bundle exec .

Когда вы запускаете bundle install --deployment , bundler взял ваши драгоценные камни из . / vendor / cache и поместил их в . / vendor / bundle .С тех пор Bundler знает, где их найти, но вы должны запускать приложение через Bundler.

Rubygems, однако, не знает, где находятся эти драгоценные камни, поэтому они не отображаются при запускекоманда rubygems список драгоценных камней .Когда вы установили Rack 1.3.6 с использованием rubygems, естественно, rubygems нашли его, и ваше приложение начало работать.

Если не использовать bundler для запуска приложения, rubygems позволяет удовлетворить требования вашего приложения в соответствии с его собственным методом, и этодовольно случайно - я был бы весьма удивлен, если бы ваше приложение в настоящее время работало с теми же версиями гемов, на которых вы выполняли свои тесты, например (Eek!)

Я обычно использую подход, чтобы удалить все драгоценных камней с сервера, установите одну версию rubygems и bundler, а затем полагайтесь исключительно на Bundler для поддержки драгоценных камней моего приложения.Прелесть пакета в том, что он вычисляет действительный набор драгоценных камней и надежно его использует.

Надеюсь, это поможет!

...