【问题标题】:Bundler not working with rbenv, could not find [gem]Bundler 无法与 rbenv 一起使用,找不到 [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。

标签: ruby sinatra bundler rbenv


【解决方案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)

              1. 确保您在远程服务器中安装了“rbenv”和 ruby​​ 版本(例如 1.9.3)

              2. 在您的 config/deploy.rb(capistrano 文件)中

                require 'capistrano-rbenv'
                
              3. 在您的 Gemfile 中:

                gem 'capistrano-rbenv', '1.0.1'
                
              4. 就是这样。要调试它是否有效,只需运行:

                $ 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
              

              【讨论】:

                猜你喜欢
                • 2019-03-29
                • 1970-01-01
                • 1970-01-01
                • 2016-07-11
                • 2019-05-31
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多