我刚从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
它有效。虽然我不认为这是一个可行的解决方案。
答案 0 :(得分:101)
我遇到了同样的问题。一个提示是rbenv exec bundle exec command
工作,rbenv exec bundle install --path vendor/bundle
工作,但他们的前缀等价物失败了。
我擦拭了~/.rbenv
,~/.gem
Gemfile.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文件。它似乎妨碍了。
答案 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)
确保您在远程服务器中安装了“rbenv”和ruby版本(例如1.9.3)
require 'capistrano-rbenv'
:
gem 'capistrano-rbenv', '1.0.1'
就是这样。要调试它是否有效,只需运行:
$ 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不依赖于垫片,只需修改PATH
,GEM_HOME
和GEM_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插件,它会让垫片意识到捆绑器路径
答案 9 :(得分:0)
对于遇到此问题的任何人。这是“找不到宝石包情况(> = 0.a)
的最简单解决方案命令:
gem update --system
然后更新捆绑程序命令:
bundle update --bundler