在使用gem进行捆绑安装期间找不到具有可执行捆绑(Gem :: GemNotFoundException)的gem bundler(> = 0.a)

时间:2019-01-08 08:28:17

标签: ruby-on-rails ruby rubygems bundle bundler

我正在执行以下脚本:

gem install rdoc --no-document
gem install bundle
bundle

输出:

+ gem install rdoc --no-document
Successfully installed rdoc-6.1.1
1 gem installed
+ gem install bundle
Successfully installed bundle-0.0.1
Parsing documentation for bundle-0.0.1
Done installing documentation for bundle after 2 seconds
1 gem installed
1 gem installed
+ bundle install
/usr/lib/ruby/2.5.0/rubygems.rb:289:in `find_spec_for_exe': can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)
    from /usr/lib/ruby/2.5.0/rubygems.rb:308:in `activate_bin_path'
    from /srv/myuser/.gem/ruby/2.5.0/bin/bundle:23:in `<main>'

我已经将/srv/myuser/.gem/ruby/2.5.0/bin添加到了自己的路径中,以便能够安装gems。

gem env显示

RubyGems Environment:
  - RUBYGEMS VERSION: 2.7.7
  - RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/2.5.0
  - USER INSTALLATION DIRECTORY: /srv/myuser/.gem/ruby/2.5.0
  - RUBY EXECUTABLE: /usr/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/bin
  - SPEC CACHE DIRECTORY: /srv/myuser/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/lib/ruby/gems/2.5.0
     - /srv/myuser/.gem/ruby/2.5.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
     - "gem" => "--user-install"
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /usr/local/sbin
     - /usr/local/bin
     - /usr/bin

gem list显示已安装的gem。 我在执行时也可以找到捆绑软件:

ls -ltrah /srv/myuser/.gem/ruby/2.5.0/bin

我也尝试安装捆绑器,但这也无济于事。 我在做什么错了?

gem which bundle什么也没有显示。gem spec bundle没有显示。

更新:我尝试在运行捆绑软件之前安装捆绑软件,但在以下时间出现相同的问题:

gem list bundle显示

bundle (0.0.1)
bundler (2.0.1)

11 个答案:

答案 0 :(得分:61)

Bundler版本2引入了一项新功能,可以自动使用项目#include <iostream> #include <map> int64_t exchange(std::map& <int64_t, int64_t>, int64_t n){ if(n<12) return n; if(dp.count(n)) return dp[n]; return dp[n] = exchange(n/2)+exchange(n/3)+exchange(n/4); } int main(){ std::map <int64_t, int64_t> dp; while(1){ int64_t n; std::cin>>n; std::cout<<exchange(dp, n)<<std::endl; } } 中指定的Bundler版本。因此,如果您现有的Gemfile.lock在底部有这样的行

Gemfile.lock

Bundler将尝试使用Bundler版本<2.0。由于您仅安装了Bundler 2.0.1(并且Rubygems> = 2.7.0),因此失败,并显示此无用的错误消息。

要解决此问题,您可以

  • BUNDLED WITH 1.17.3 中删除行,并从现在开始在各处使用bundler 2.x,或者
  • 使用Gemfile.lock安装捆绑软件1.x版本,以使用gem install bundler -v '< 2.0'指定的适当版本。

有关此问题的更多信息,请访问Bundler blog

答案 1 :(得分:35)

根据帖子中提到的描述,在运行以下提到的命令之前:

bundle install

在脚本中,您需要运行以下命令:

gem install bundler

因此,要执行的命令顺序为:

gem install bundler
bundle install

如果不起作用,请更新bundler命令:

 gem install bundler -v '1.17.3'

以下提到的链接给出了捆绑器2.0中功能中断的原因:

https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html

答案 2 :(得分:8)

gem install bundler -v '< 2.0' 

答案 3 :(得分:5)

我什至无法bundle -v。这样可以解决问题:

gem update --system

从此处获取信息(类似问题):find_spec_for_exe': can't find gem bundler (>= 0.a) (Gem::GemNotFoundException)

红宝石+宝石+捆扎机之间版本可能不匹配

答案 4 :(得分:2)

我也遇到了同样的问题。该问题是由于RubyGems无法在系统上为bundler gem找到可执行文件包所致。

要修复此问题,请先运行

trait FooTrait { public $classVariables; public function classAttributes() { $callingClass = get_class($this); $rawAttributes= $this->$classVariables = get_class_vars($callingClass); var_dump($rawAttributes); var_dump($callingClass); return $rawAttributes; } public function info() { var_dump($this->classVariables); } // manipulate $this -> classVaribales to do generic database operations } class Mine { use FooTrait; protected $attrib1; protected $attrib2; protected $attrib3; } $needed = new Mine; $needed->classAttributes(); $needed->info();

如果本地没有安装bundler gem,请运行

gem install bundler

仅此而已

我希望这会有所帮助

答案 5 :(得分:2)

您必须通过运行以下命令来安装RubyGems寻找的Bundler的确切版本:

$ gem install bundler -v "$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1)"

答案 6 :(得分:1)

我最近有同样的问题。 就我而言,我在捆绑器上安装了与Gemfile.lock中记录的版本不同的版本。请检查

答案 7 :(得分:0)

我今天也遇到了同样的错误。我以前在系统中安装的捆绑软件版本为:1.16.6

按照How to Upgrade to Bundler 2上的官方捆绑程序文档中的说明进行操作,以下两个步骤可以解决问题:

  1. gem install bundler(帮助您获取最新版本的捆绑软件,截止到今天是2.0.2)
  2. bundle update --bundler

答案 8 :(得分:0)

将mac os升级到Catalina后,我看到了travis捆绑包的类似错误消息。

Traceback (most recent call last):
    2: from /usr/local/bin/travis:22:in `<main>'
    1: from /usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/rubygems.rb:263:in `bin_path'
/usr/local/Cellar/ruby/2.6.5/lib/ruby/2.6.0/rubygems.rb:284:in `find_spec_for_exe': can't find gem travis (>= 0.a) with executable travis (Gem::GemNotFoundException)

要解决此问题,我从源代码重新安装了travis。

brew remove travis;
brew install -s travis

答案 9 :(得分:0)

这可能有助于解决问题

bundle update --bundler

答案 10 :(得分:0)

是的,这有效:

gem install bundler -v "$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1)"

来自:https://bundler.io/blog/2019/05/14/solutions-for-cant-find-gem-bundler-with-executable-bundle.html