Bundler 无法与 rbenv 一起使用,找不到 [gem]
Posted
技术标签:
【中文标题】Bundler 无法与 rbenv 一起使用,找不到 [gem]【英文标题】:Bundler not working with rbenv, could not find [gem] 【发布时间】:2012-03-25 01:25:18 【问题描述】:我刚刚从 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
,它会起作用。虽然我不认为这是一个可行的解决方案。
【问题讨论】:
你的PATH
是什么,which bundle
的输出是什么?
我将此信息添加到我原来的问题中。
三年后...同样的问题。这很可悲,ruby 的整个包/依赖管理环境感觉就像一个巨大的 hack。
【参考方案1】:
你跑了吗
rbenv rehash
这将为所有 ruby 二进制文件提供 shims,包括由 gem 安装的二进制文件。
【讨论】:
为我工作。感谢您的提示。 +1 表示rbenv rehash
。您必须在使用 rbenv 安装新的 ruby 后执行此行。【参考方案2】:
我遇到了同样的问题。一个提示是 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 文件。好像有点碍事。
【讨论】:
你省了我提到 ~/.gem,现在 bundle-install 运行良好! 非常感谢!我很确定我的问题是我在再次安装 Bundler 后没有运行rbenv rehash
。在gem install bundler && rbenv rehash && bundle install
使用 rbenv Ruby 之后,错误消失了!
我登录是为了给你点赞。这个问题开始让我发疯。似乎执行此操作的命令是 gem install --no-ri --no-rdoc bundler
和 rbenv rehash
与 gem 路径矛盾。我只是遇到了同样的问题......我的捆绑安装运行但随后的 gem 列表没有显示它们。我在 .gem_old 中重命名了我的 ~/.gem,现在我的应用程序 gem_path 中的第二个位置正在被使用……而这个位置实际上包含了必要的 gem。我还是不太明白 gem path 的事情……
gem install --no-ri --no-rdoc bundler
对我来说是缺少的技巧。谢谢!【参考方案3】:
也提醒一下,rbenv 不与 rvm 兼容,它们不能很好地发挥作用。为了您的理智,如果您想使用 rbenv,请卸载 rvm。来自 rbenv 自述文件:
兼容性说明:rbenv 与 rvm 不兼容。事情会出现 在您尝试安装 gem 之前一直工作。问题是 rvm 实际上用一个shell函数覆盖了gem命令!请 在使用 rbenv 之前删除对 rvm 的所有引用。
幸运的是,Wayne(rvm 创建者)提供了一个可轻松使用的删除 rvm:
rvm implode
作为常规使用或:
rvmsudo rvm implode
清理 rvm 系统范围。
【讨论】:
【参考方案4】:试试这个 rbenv 插件,它会让 shims 知道捆绑器路径
https://github.com/carsomyr/rbenv-bundler
【讨论】:
【参考方案5】:您应该尝试使用chruby。 chruby 是 RVM / rbenv 的超最小(约 80 行)替代品。与 rbenv 不同,chruby 不依赖 shim,只是简单地修改了 PATH
、GEM_HOME
和 GEM_PATH
。
【讨论】:
【参考方案6】:添加这个
set :default_environment,
'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
deploy.rb 对我有用。
http://henriksjokvist.net/archive/2012/2/deploying-with-rbenv-and-capistrano/
【讨论】:
【参考方案7】:当我从使用 rvm 切换到 rbenv 时,我遇到了类似的问题。我发现我的捆绑器显示的宝石列表与我的 gem list
命令不同。首先检查您的捆绑器和 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 路径,但我的捆绑器指向我项目的供应商路径。
运行以下命令应该可以解决捆绑器路径问题:
$ 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
路径仍然存在,则需要删除它。
更改这些文件后,您需要打开一个新的终端会话。终于,我终于让我的捆绑器和 gem 同步了。
【讨论】:
【参考方案8】:我在这里尝试了所有东西,但对我来说发现我的用户主目录中有一个 .bundler 出于某种原因。这导致了上面的奇怪问题,其中“which”命令在 shims 路径中正确列出了 bundle,但检查 bundle -v 显示旧系统版本,而 /Users/jerimiah/.rbenv/shims/bundle 显示最新版本。我在我的主目录中删除了 .bundler,重新哈希,重新启动我的终端,一切都开始工作了。
【讨论】:
【参考方案9】:我建议你使用 gem 'capistrano-rbenv' (https://github.com/yyuu/capistrano-rbenv)
确保您在远程服务器中安装了“rbenv”和 ruby 版本(例如 1.9.3)
在您的 config/deploy.rb(capistrano 文件)中
require 'capistrano-rbenv'
在您的 Gemfile 中:
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]
【讨论】:
这解决了我在部署时找不到捆绑包的问题,尽管它在直接登录到盒子时可用。【参考方案10】:对于遇到此问题的任何人。这是“找不到 gem bundle 情况 (>= 0.a)
的最简单解决方案命令:
gem update --system
然后更新捆绑器命令:
bundle update --bundler
【讨论】:
以上是关于Bundler 无法与 rbenv 一起使用,找不到 [gem]的主要内容,如果未能解决你的问题,请参考以下文章
/usr/bin/env ruby 没有这样的文件或目录:使用 capistrano 3、capistrano/rbenv、capistrano/bundler 和 capistrano/rail
无法使用 rbenv 执行已安装的 gem `erb2slim`