即使安装了 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_HOME
或 gem 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 bundler
和bundle
。问题解决了。
【讨论】:
【参考方案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 时遇到了同样的问题。重新安装后,我注意到捆绑器已安装,并且
作为快速修复,我手动将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
无法加载带有本机扩展的 gem:fresh 10.8、xcode 4.5、rvm