即使安装了 gem,RVM Bundle Install Missing Gem 错误

Posted

技术标签:

【中文标题】即使安装了 gem,RVM Bundle Install Missing Gem 错误【英文标题】:RVM Bundle Install Missing Gem Error even though gem is installed 【发布时间】:2012-02-17 22:27:11 【问题描述】:

即使我目前确实安装了 Bundler gem(它在我运行 $gem list 时出现),但仍收到以下错误。

ERROR: Gem bundler is not installed, run `gem install bundler` first.

我正在使用 RVM,我的 $PATH 如下:

/Users/cjstingl/.rvm/gems/ruby-1.9.2-p290@rails3tutorial2ndEd/bin:
/Users/cjstingl/.rvm/gems/ruby-1.9.2-p290@global/bin:
/Users/cjstingl/.rvm/rubies/ruby-1.9.2-p290/bin:
/Users/cjstingl/.rvm/bin:
/Users/cjstingl/.bin:
/usr/local/sbin:
/usr/local/Cellar/php/5.3.6/bin:
/usr/local/share/python:
/usr/bin:
/bin:
/usr/sbin:
/sbin:
/usr/local/bin:
/usr/X11/bin

这也是我的 gem 环境

RubyGems Environment:
  - RUBYGEMS VERSION: 1.8.15
  - RUBY VERSION: 1.9.2 (2011-07-09 patchlevel 290) [x86_64-darwin11.2.0]
  - INSTALLATION DIRECTORY: /Users/cjstingl/.rvm/gems/ruby-1.9.2-p290@rails3tutorial2ndEd
  - RUBY EXECUTABLE: /Users/cjstingl/.rvm/rubies/ruby-1.9.2-p290/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/cjstingl/.rvm/gems/ruby-1.9.2-p290@rails3tutorial2ndEd/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-11
  - GEM PATHS:
     - /Users/cjstingl/.rvm/gems/ruby-1.9.2-p290@rails3tutorial2ndEd
     - /Users/cjstingl/.rvm/gems/ruby-1.9.2-p290@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => false
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
     - "gem" => "-n/usr/local/bin --no-ri --no-rdoc --no-user-install"
  - REMOTE SOURCES:
     - http://rubygems.org/

另外:使用 bundle -v 命令返回相同的错误

我尝试过破坏 RVM 并重新安装,但这似乎不起作用。我很难过,任何帮助将不胜感激。

【问题讨论】:

你可以使用bundle 命令吗?试试bundle -v 使用 bundle -v 命令返回同样的错误 奇怪,bundle 命令是 Bundler gem 的一部分——如果命令运行(甚至给出错误消息),这意味着 Ruby 正在以某种方式加载。你确定你跑了gem install bundler? 【参考方案1】:

我也有这个问题。我通过指定 gemset 解决了我的问题。

$ bundle install
ERROR: Gem bundler is not installed, run `gem install bundler` first.

$ rvm gemdir
/usr/local/rvm/gems/ruby-1.9.3-p194

$ rvm gemset list

gemsets for ruby-1.9.3-p194 (found in /usr/local/rvm/gems/ruby-1.9.3-p194)
   global
   rails32

$ rvm gemset use rails32

Using ruby-1.9.3-p194 with gemset rails32

$ rails s

Could not find rake-10.0.4 in any of the sources

Run `bundle install` to install missing gems.

$ bundle install

Fetching gem metadata from https://rubygems.org/.......
And voila! it worked!

【讨论】:

【参考方案2】:

对于我的设置,将运行 apache 的用户添加到 rvm 组工作

usermod -a -G rvm www-data

【讨论】:

【参考方案3】:

如果你深陷其中,却还在用头撞墙……

我的问题是 rvm install 1.8.7 在安装后期失败但似乎成功(我有 ruby​​ 1.8.7 并且可以创建 gemsets)

但似乎 $GEM_HOME 在安装脚本中设置得很晚,由于没有设置,所以 rvm 没有在正确的位置寻找 gem。

我运行rvm reinstall 1.8.7 并仔细查看错误。

给我提示的是这个帖子: https://groups.google.com/d/topic/rubyversionmanager/aUBDxbBzZpE/discussion

您可以通过运行检查这是否是您的问题

echo $GEM_HOMEgem env 或检查您的 rvm 安装日志(参见上面的链接)

您在 Gem Path 中看到您的 ruby​​ 版本和 gemset 名称了吗?如果没有,可能是 rvm 安装失败。

【讨论】:

如果可以的话,我会多次 +1 这篇帖子。最后的线索是 $GEM_HOME 显示了我当前 rvm Ruby 版本的正确路径,但 gem env Gem 路径显示了默认 Ruby 版本的路径。我尝试rvm reinstall 1.9.2-p180 并在安装rubygems 时发现一个错误,说我需要将--verify-downloads 1 添加到命令中。有效。 /头撞【参考方案4】:

在我的一台笔记本电脑上遇到了同样的问题(我一直在安装捆绑程序,而 rvm 无法识别它)。我猜我可能在我还是个 Rails 菜鸟的时候安装了错误的 RVM。我尝试了上面的解决方案,但它对我不起作用。在弄乱它之后,我放弃并删除了 RVM 并重新安装它。我认为这是由于一些奇怪的配置问题深深地嵌套在某处或 .以下是我采取的步骤:

移除 RVM:

rvm implode

再次安装 RVM:

curl -L https://get.rvm.io | bash -s stable --rails
rvm reload

由于我正在为一个旧的 Rails 项目工作,我不得不安装 ree-1.8.7-2012.02

rvm install ree-1.8.7-2012.02

当然,墨菲定律仍然适用。我遇到了另一个问题,即使 Xcode 与 gcc 一起安装,我的笔记本电脑也找不到 非损坏的 C 编译器。我的最后一步是去 https://github.com/kennethreitz/osx-gcc-installer 并安装他们的包并重新安装 ree。

我希望这个最后的解决方案可以帮助某人。祝你好运!

【讨论】:

【参考方案5】:

试试这个:https://rvm.io/integration/gnome-terminal/

它说关于启动时运行的配置文件,我正在运行 ubuntu 12.10 并且它可以工作。您只需在终端配置文件首选项(选项卡标题和命令)中设置“将命令作为登录 shell 运行”。

希望它能为某人节省一些时间。

【讨论】:

【参考方案6】:

在具有相同设置的多台机器上安装了 RVM 并且在一台机器上出现 RVM 问题但在另一台机器上没有这些问题后,我决定寻找更好、更不容易出错的东西。

我找到并切换到rbenv,比RVM简单得多。

正如 rbenv 的 README 所说:

rbenv 确实……

让您根据每个用户更改全局 Ruby 版本。 提供对每个项目的 Ruby 版本的支持。 允许您使用环境变量覆盖 Ruby 版本

与 rvm 相比,rbenv 没有……

需要加载到您的 shell。 相反,rbenv 的 shim 方法通过将目录添加到您的 $PATH 来工作。 覆盖 cd 等 shell 命令。这很危险且容易出错。 有一个配置文件。除了你想使用哪个版本的 Ruby 之外,没有什么可配置的。 安装 Ruby。您可以自己构建和安装 Ruby,或使用 ruby-build 自动执行该过程。 管理 gemsets。 Bundler 是管理应用程序依赖项的更好方法。如果您有尚未使用 Bundler 的项目,您可以安装 rbenv-gemset 插件。 需要更改 Ruby 库以实现兼容性。 rbenv 的简单性意味着只要它在您的 $PATH 中,nothing else 就需要知道它。 当您切换到一个项目时会提示您警告。 rbenv 不会执行任意代码,而是仅从每个项目中读取版本名称。没有什么可以“信任”的。

所以如果你问我,转储 RVM 并切换到 rbenv。

【讨论】:

【参考方案7】:

在更新我的 Ruby 补丁级别后,我自己遇到了这个问题。我运行了which gem,发现它使用的是全局版本的rubygems,在这种情况下路径是~/.rvm/bin/gem。所以我跑了rvm rubygems current,它安装在~/.rvm/rubies/ruby-1.8.7-p370/bin/gem。再次运行gem install bundlerbundle。问题解决了。

【讨论】:

【参考方案8】:

我今天早些时候遇到了同样的问题。我用来解决这个问题的方法是这样的:

1) 运行

cap shell

在您通常运行 cap deploy 的同一台机器上。然后执行

env | sort

这会在远程服务器上运行命令。将输出复制并粘贴到本地文本文件中,例如capenv.txt

2) SSH 进入同一个远程服务器,并执行相同的命令,即 env |种类。将此本地保存为文本文件,例如sshenv.txt

3) 比较这两个文件并查看 sshenv.txt 中的内容而不是 capenv.txt 中的内容 - 这很可能是您的问题所在。

< ++CAP ++
< _=/bin/sh
---
> ++ SSH ++
> __array_start=0
14a15
> PS1=\[\e]2;tracker@charlotte\a\e[0;31m LIVE:\u@\h \w> \e[0m
18d18
< rvm_env_string=ruby-1.9.3-p194
21d20
< rvm_ruby_string=ruby-1.9.3-p194
27c26,28
< USER=tracker
\ No newline at end of file
---
> USER=tracker
> USES_BASHRC=bashrc
> _=/usr/bin/env

4) 我立即注意到 shell 解释器没有设置为 bash。这可以通过添加来解决

set :shell, '/usr/bin/bash'

到您的 deploy.rb 文件。这解决了我的问题

【讨论】:

你也可以在 capistrano shell 中执行 'ruby -v'。如果出现错误的版本,则表明捆绑程序无法正常工作【参考方案9】:

我遇到了类似的问题。原来我没有特定于项目的 .rvmrc 文件。我刚刚创建它使用

rvm --rvmrc --create 1.9.3@my_project_name

在我的项目目录中

这解决了问题

【讨论】:

这也解决了我的问题。这是否意味着每个项目都必须这样做?我以前不这样做... 我切换到 rbenv。它要简单得多,并且没有 gemsets 的概念。如果您在所有应用程序中都使用 bundler,那么 rbenv 就很简单了。【参考方案10】:

当我切换到 (rvm 1.15.1) 的目录中有一个空的 .rvmrc 文件时,我遇到了同样的问题。显然这个错误有很多原因

【讨论】:

【参考方案11】:

我在全新安装 RVM 1.10.3 时遇到了同样的问题。重新安装后,我注意到捆绑器已安装,并且 /bin 目录已添加到我的 $PATH 中,但这些 bin 目录实际上并不存在。我认为这只是一个 RVM 错误。

作为快速修复,我手动将bundle 二进制文件复制到确实存在的 RVM bin 目录中。这似乎解决了我的问题:

$ cd ~/.rvm
$ cp gems/ruby-1.9.3-p0/gems/bundler-1.0.21/bin/bundle rubies/ruby-1.9.3-p0/bin/

这些路径中的 Ruby 和 Bundler 版本对您来说可能会有所不同。


上面的解决方案有效,但是它困扰着我,所以我把它交给了 rvm 人;原来我的 ~/.gemrc 文件用这一行覆盖了 gem 位置:

- "gem" => "-n/usr/local/bin"

删除它为我修复了它。完整主题请参见此处:https://github.com/wayneeseguin/rvm/issues/1043#issuecomment-7336267

【讨论】:

为我工作。 ln -s ~/.rvm/gems/ruby-1.9.2-p290@fonista/bin/bundle ~/.rvm/bin/ 成功了。谢谢! 我遇到了一个错误,通过删除 .gemrc 中的“gem: /usr/local/bin”解决了这个错误。谢谢!错误:执行 gem 时 ... (Gem::CommandLineError) Gem 名称过多 (/usr/local/bin, /usr/local/bin);请仅指定一个 T_T 因为这个问题我花了 3 小时... 谢谢你!!!也可以检查一下github.com/wayneeseguin/rvm/issues/1043【参考方案12】:

我遇到了类似的问题,经过大量的反复试验,答案(至少对我而言)非常简单。

这绝对是路径问题,@gamecreature 提到的路径顺序对我来说是至关重要的线索。

我不确定它是怎么发生的,但我将 $HOME/.rvm/bin 作为我的 PATH 导出中的第一项。

这是不必要的,因为此目录通过获取 rvm 文件以正确的顺序添加到路径中。

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

所以我的解决方法是从我的 PATH 导出中删除 $HOME/.rvm/bin

如果您有多个初始化文件(.bashrc、.bash_profile、.profile),请务必遵循rvm troubleshooting page 上的建议:

确保 rvm 文件的来源发生在您的最后 配置文件(.bash_profile / .bashrc / .zshrc)基本上在任何 PATH / 函数或别名的自定义。

但我还建议检查 PATH 定义的其余部分,以确保没有任何重复声明会优先。

【讨论】:

这解决了我的问题,我已经安装了很多次 rvm,并且一定是变得懒惰并跳过了这一步(添加 [[ -s "$HOME/.rvm/scripts/rvm" ] ] && source "$HOME/.rvm/scripts/rvm" 到我的 .bashrc 文件。)这也解决了一些其他奇怪的行为。感谢您提供了一个很好的答案,并解释了自己。 @Patrick Smith:关于多个初始化文件的非常好的提示!这在几个例子中咬了我;-) 看起来RVM troubleshooting link has changed to this location。我还建议将用户定向到Invocation section of the bash man page。在登录与非登录 shell 的情况下,~/.bash_profile~/.bash_login~/.profile 文件的优先级顺序,最后是 posix 模式和历史 sh 模式,这确实有助于揭开 shell 行为的神秘面纱.【参考方案13】:

由于略有不同的原因,我遇到了非常相似的问题。我的主目录有一个旧 ruby​​ 设置遗留下来的 .gemrc 文件,我在删除旧文件时​​错过了。似乎 gem 将 rvm 设置与此文件中的设置混淆了。一旦我删除它(以及一些安装到旧位置的文件),一切正常。

【讨论】:

【参考方案14】:

我通过 rvm 安装了 ruby​​ 1.9.3。 git octopress 完成后,只需像这样“rvm use 1.9.3”编辑 $path_of_git/.rvmrc。然后运行“cd ..; cd $path_of_git”命令。之后它会询问你是否信任 .rvmrc。键入“y”以使 .rvmrc 文件正常工作。

【讨论】:

【参考方案15】:

当我指定要使用的 Ruby 版本时,这对我有用:

$ rvm use 1.9.2-p290
Using /Users/myname/.rvm/gems/ruby-1.9.2-p290

【讨论】:

【参考方案16】:

你知道吗,这显然是你的 PATH 变量的问题。

您应该确保which bundle 类似于/usr/local/rvm/gems/ruby-1.9.3-p194/bin/bundle 而不是/usr/local/rvm/bin/bundle

提示:

您是否只是在 .zshrc 文件中使用了 PATH=some 明确的列表?

那你应该把它改成 PATH=$PATH:some list

【讨论】:

谢谢!这解决了我的问题。【参考方案17】:

在切换到新的空 gemset 并运行 gem install bundler 后,这也发生在我身上。原因是外壳“记住”了您使用的最后一个 bundle 可执行文件。解决这个问题(至少在bash-descendants):

hash -r

【讨论】:

【参考方案18】:

将以下内容(取自 .bash_profile)添加到 .bashrc 为我修复了它:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 

【讨论】:

也为我工作。谢谢! 别忘了从你的主目录运行source .bashrc @Roman 我在全新安装 Ubuntu 12.04 并使用 RVM 后遇到了这个问题。为什么会这样?! RVM 不应该自己正确设置这些路径吗? 为我在 Mountain Lion 上运行 zsh 和 oh-my-zsh 工作。 如果这不起作用,您可能无法正确登录。例如。你没有su - 用户名【参考方案19】:

我不知道这是否是您的问题的原因。 但我有一个类似的问题。原因是我的 RVM 环境不正确。

我有 2 个用户,一个正在工作,另一个没有。 工作用户使用以下捆绑脚本。 (输出自:哪个包)

/home/rvm/.rvm/gems/ruby-1.9.3-p0/bin/bundle

使用了错误的 rvm-installation 用户:

/home/user/.rvm/bin/bundle

原因是错误的 $PATH 顺序。 .rvm/gems/ruby-.../bin 路径应该放在 ./rvm/bin 路径之前。

在我的情况下,原因是我将 $PATH 变量设置为另一个用户的 rvm。我通过向用户的 RVM 添加符号链接并更改我的路径来解决此问题:

/home/rvm/.rvm/bin

/home/user/.rvm/bin

当上面的代码对你不起作用时,你可以在加载 rvm 之后手动调整路径。

【讨论】:

以上是关于即使安装了 gem,RVM Bundle Install Missing Gem 错误的主要内容,如果未能解决你的问题,请参考以下文章

运行 bundle install 时如何传递 gem 安装的参数?

Bundle 无法在 Mac OSX 10.7 上安装 RMagick gem

bundler 在哪里存储宝石?

无法加载带有本机扩展的 gem:fresh 10.8、xcode 4.5、rvm

pg gem 安装错误 - lion osx、bundler 和 rvm

[fastlane] [gem] [rvm] [ruby]