Bundler不使用rbenv,找不到[gem]

时间:2012-03-07 13:56:43

标签: ruby sinatra bundler rbenv

我刚从rvm切换到 rbenv ,我正在尝试使用bundler进行gem管理。运行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'

我说服这是一种路径问题,而bundler和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它有效。虽然我不认为这是一个可行的解决方案。

10 个答案:

答案 0 :(得分:101)

我遇到了同样的问题。一个提示是rbenv exec bundle exec command工作,rbenv exec bundle install --path vendor/bundle工作,但他们的前缀等价物失败了。

我擦拭了~/.rbenv~/.gem Gemfile.lockvendor/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文件。它似乎妨碍了。

答案 1 :(得分:22)

你跑吗

rbenv rehash

这将为所有ruby二进制文件提供填充程序,包括由gem安装的二进制文件。

答案 2 :(得分:20)

添加此

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

部署.rb为我工作。

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

答案 3 :(得分:6)

我建议你使用宝石'capistrano-rbenv'(https://github.com/yyuu/capistrano-rbenv

  1. 确保您在远程服务器中安装了“rbenv”和ruby版本(例如1.9.3)

  2. config / deploy.rb(capistrano文件)中的
  3. require 'capistrano-rbenv'
    
  4. 你的Gemfile中的
  5. gem 'capistrano-rbenv', '1.0.1'
    
  6. 就是这样。要调试它是否有效,只需运行:

    $ 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]
    

答案 4 :(得分:2)

您应该尝试使用chruby。 chruby是RVM / rbenv的超小型(约80行)替代品。与rbenv不同,chruby不依赖于垫片,只需修改PATHGEM_HOMEGEM_PATH

答案 5 :(得分:2)

当我从使用rvm切换到rbenv时,我遇到了类似的问题。我发现我的捆绑器显示的是不同于我的gem list命令的宝石列表。首先检查您的bundler和gem正在使用哪些路径。对于bundler,请使用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路径仍然存在,则需要将其删除。

更改这些文件后,您需要打开一个新的终端会话。最后,我终于让我的捆绑器和宝石同步了。

答案 6 :(得分:1)

只是提醒一下,rbenv 与rvm兼容,但它们不能很好地播放。为了您的理智,如果您想使用rbenv,请卸载rvm。来自rbenv自述文件:

  

兼容性说明:rbenv与rvm不兼容。事情会出现   一直工作,直到你尝试安装宝石。问题是rvm   实际上用shell函数覆盖了gem命令!请   在使用rbenv之前删除对rvm的任何引用。

幸运的是,Wayne(rvm creator)使用以下方法轻松提供了删除rvm:

rvm implode

经常使用或:

rvmsudo rvm implode

清理rvm系统。

答案 7 :(得分:1)

我在这里尝试了所有的东西,但是对我来说,发现我的用户主目录中有一个.bundler由于某种原因。这导致了上面的奇怪问题,其中'which'命令在填充程序路径中正确列出了bundle,但是检查bundle -v显示了旧系统版本,而/Users/jerimiah/.rbenv/shims/bundle显示了最新版本。我在我的主目录中删除了.bundler,重新启动,重新启动了我的终端,一切都开始工作了。

答案 8 :(得分:0)

尝试一下这个rbenv插件,它会让垫片意识到捆绑器路径

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

答案 9 :(得分:0)

对于遇到此问题的任何人。这是“找不到宝石包情况(> = 0.a)

的最简单解决方案

命令:

gem update --system 

然后更新捆绑程序命令:

bundle update --bundler