2012-02-14 12 views
0

DreamHostで専用のホスティングアカウントを開設しました。私はそれにレールアプリを配備しました。私は次のエラーを受け取りました。バンドルラーパスについての混乱

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がありません。しかし、「バンドルショー」でチェックしたところ、すでにインストールされていました。 (実際に私は、 "バンドルが--deploymentインストール" でした)

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

そして私は設定/ 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"だけで問題は解決しました。

なぜ乗客はバンドルのラックの宝石の代わりにシステムのラックの宝石(またはユーザーのラックの宝石)をピックアップするのですか?この問題をどうやって回避するのですか?

ありがとうございました。

サム

+0

私はRack 1.3.6をインストールしようとしましたが、それは私のためには機能しませんでした。それはまだそれが "既に活性化ラック1.2.1"だと言っている。 – mysmallidea

答えて

0

通常、これはあなたがバンドル幹部でコマンドを前に置くことなく、あなたのアプリケーション(例えばレールサーバー)を実行すると、あなたが得るものです。あなたはバンドルが--deploymentをインストールする実行したとき

、バンドラは./vendor/cacheからあなたの宝石を取り、./vendor/bundleでそれらをフラフラ。その後、Bundlerはそれらを見つける場所を知っていますが、Bundlerを通じてアプリを実行している必要があります。

しかし、Rubygemsは、これらの宝石がどこにあるかわからないため、rubygemsコマンドを実行したときに表示されません。gem list rubygemsを使ってRack 1.3.6をインストールしたとき、ルビはそれを見つけたので、あなたのアプリは動作し始めました。

あなたのアプリを起動するためにbundlerを使用しないと、Rubygemsは独自の方法に従ってアプリケーションの要件を満たしています。これはかなりランダムです - あなたのアプリケーションが現在あなたと同じ宝石のバージョンをすべて実行しているなら例えば、上でテストを実行しましたが(イーク!)

私は通常取るアプローチは、RubyGemsのとバンドラの単一バージョンを、サーバーからすべて宝石をアンインストールすることで、その後、私を維持するために、バンドラーのみに依存していますアプリの宝石。バンドルラーの美しさは、宝石の有効なセットを計算し、それを確実に使用することです。

希望すると便利です。

関連する問題