web-dev-qa-db-ja.com

Bundlerはrbenvで動作せず、[gem]を見つけることができませんでした

Rvmからrbenvに切り替えたばかりで、gem管理にbundlerを使用しようとしています。 bundle installを実行し、単純なsinatraアプリ(Ruby app.rb)を実行しようとすると、次のようになります。

Could not find haml-3.1.4 in any of the sources
Run `bundle install` to install missing gems.

bundle installを再度実行しても効果はありません。別の質問への回答で示唆されているように、bundle updateも試しました。

これは私のGemfileです。

source "http://rubygems.org"

gem "sinatra"
gem "haml"

これがbundle showが生成するものです

* bundler (1.0.22)
* haml (3.1.4)
* rack (1.4.1)
* rack-protection (1.2.0)
* sinatra (1.3.2)
* tilt (1.3.3)

これは私のアプリが必要とするものです:

require "rubygems"
require "bundler/setup"
require 'sinatra'

私は、これがバンドラーとrbenvが一緒になっていないパスの問題の一種であると確信しています。 rbenvのドキュメントを調べてみましたが、何も見つかりませんでした。

注:別のsinatraアプリでは、実行しようとすると次のメッセージが表示されます:

Could not find addressable-2.2.7 in any of the sources
Run `bundle install` to install missing gems.

補足情報

echo $PATH
/Users/uri/.rbenv/shims:/Users/uri/.rbenv/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

which bundle
/Users/uri/.rbenv/shims/bundle

更新

bundle install --systemを実行すると動作します。これは実行可能なソリューションであるとは思えませんが。

41
Uri

私は同じ問題を抱えていました。 1つのヒントは、rbenv exec bundle exec commandは機能し、rbenv exec bundle install --path vendor/bundleは機能したが、接頭辞付きの同等のものが機能しなかったことです。

~/.rbenv~/.gemGemfile.lock、およびvendor/bundleを数回ワイプして、新しく起動しようとしました。これらが一掃されたら、次のことを試しました。

rbenv install 1.9.3-p194
rbenv rehash # for paranoia's sake
rbenv global 1.9.3-p194
gem env # to check that everything was pointing at 1.9 and not the system
gem install --no-ri --no-rdoc bundler
rbenv rehash # necessary to load up the bundle executable
bundle --path=vendor/bundle

そしてそれは働いた!

私はこれを数回試したので、重要なことはホームディレクトリから.gemファイルを削除することだと思います。邪魔になるようです。

101
kweerious

走りましたか

rbenv rehash

これにより、gemsによってインストールされたものを含むすべてのRubyバイナリにshimが提供されます。

22
Ben Woodall

これを追加する

set :default_environment, {
  'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
}

deploy.rbが機能しました。

http://henriksjokvist.net/archive/2012/2/deploying-with-rbenv-and-capistrano/

20
thdr

Gem 'capistrano-rbenv'を使用することをお勧めします( https://github.com/yyuu/capistrano-rbenv

  1. 「rbenv」とRubyバージョン(1.9.3など)がリモートサーバーにインストールされていることを確認してください

  2. config/deploy.rb(capistranoファイル)

    require 'capistrano-rbenv'
    
  3. gemfileで:

    gem 'capistrano-rbenv', '1.0.1'
    
  4. それでおしまい。動作するかどうかをデバッグするには、次を実行します。

    $ cap Shell
    cap> which Ruby
     ** [out :: 10.103.13.74] /root/.rbenv/shims/Ruby
    cap> Ruby -v
     ** [out :: 10.103.13.74] Ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-linux]
    

chruby を使用してみてください。 chrubyは、RVM/rbenvの超最小(〜80行)の代替です。 rbenvとは異なり、chrubyはシムに依存せず、単にPATHGEM_HOMEおよびGEM_PATH

2
postmodern

Rvmからrbenvに切り替えたときに、同様の問題が発生しました。 gem listコマンドとは異なるバンドルのリストが表示されていることがわかりました。最初に、バンドラーとgemが使用しているパスを確認してください。バンドラーの場合は、showコマンドを使用し、任意のgemを選択します。

$ bundle show ffi
/my/project/path/vendor/Ruby/1.9.1/gems/ffi-1.1.5

および私のgem environmentコマンド(一部)

$ gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 1.8.23
  - Ruby VERSION: 1.9.2 (2011-07-09 patchlevel 290) [x86_64-darwin10.8.0]
  - INSTALLATION DIRECTORY: /Users/rolf/.rbenv/versions/1.9.2-p290/lib/Ruby/gems/1.9.1

ここでは、gemが正しいrbenvパスを指しているのがわかりますが、私のbundlerはプロジェクトのベンダーパスを指し示しています。

次のコマンドを実行すると、バンドラーパスの問題が修正されます。

$ bundle install --system

Bundlerパスはrbenvパスを指しているはずです。

$ bundle show ffi
/Users/rolf/.rbenv/versions/1.9.2-p290/lib/Ruby/gems/1.9.1/gems/ffi-1.1.5

また、rvm implodeコマンドを実行してrvmをアンインストールしても、rvmパスを削除するために変更する必要がある次のファイルがまだありました。

~/.profile
~/.bashrc
~/.zshrc

~/.rvmパスがまだ存在する場合、これを削除する必要があります。

これらのファイルを変更した後、新しいターミナルセッションを開く必要があります。結局、私はついに私のバンドラーと宝石を同期させました。

2
rlawrenz

Rbenvがnot rvmと互換性があることを思い出してください。 rbenvを使用する場合は、健全性のためにrvmをアンインストールしてください。 rbenv READMEから:

互換性に関する注意:rbenvはrvmと互換性がありません。 gemをインストールするまで、動作するように見えます。問題は、rvmが実際にシェル関数でgemコマンドをオーバーライドすることです! rbenvを使用する前にrvmへの参照を削除してください。

幸いなことに、Wayne(rvm creator)は以下を使用して簡単にremove rvmを提供します:

rvm implode

通常の使用または:

rvmsudo rvm implode

システム全体のrvmをクリーニングします。

1
ajhit406

ここですべてを試しましたが、何らかの理由でユーザーのホームディレクトリに.bundlerがあることを発見しました。これにより、上記の「which」コマンドがshimsパスにバンドルを正しくリストするという奇妙な問題が発生しましたが、bundle -vを確認すると古いシステムバージョンが表示され、/ Users/jerimiah/.rbenv/shims/bundleが最新バージョンを表示しました。ホームディレクトリの.bundlerを削除し、再ハッシュし、ターミナルを再起動すると、すべてが機能し始めました。

1
jerimiah797

このrbenvプラグインを試してみると、shimがバンドラーパスを認識します。

https://github.com/carsomyr/rbenv-bundler

0
CodedReality