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~/.gemGemfile.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 文件。好像有点碍事。

【讨论】:

你省了我提到 ~/.gem,现在 bundle-install 运行良好! 非常感谢!我很确定我的问题是我在再次安装 Bundler 后没有运行rbenv rehash。在gem install bundler && rbenv rehash && bundle install 使用 rbenv Ruby 之后,错误消失了! 我登录是为了给你点赞。这个问题开始让我发疯。似乎执行此操作的命令是 gem install --no-ri --no-rdoc bundlerrbenv 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,只是简单地修改了 PATHGEM_HOMEGEM_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版本

无法使用rbenv使用ruby版本2.4.2p198

无法使用 rbenv 执行已安装的 gem `erb2slim`

[尝试部署]:您必须使用带有此锁定文件的 Bundler 2 或更高版本

Bundler:您必须使用 Bundler 2 或更高版本与此锁定文件