Gem::Gem 未找到异常

Gem::Gem Not Found Exception

我的拉取请求在 linters 上一直失败,并出现此 Ruby gem 错误:

Run[ -f Gemfile ] && bundle --deployment
gem install --no-document rspec:'~>3.0'
shell: /bin/bash -e {0}/opt/hostedtoolcache/Ruby/2.6.6/x64/lib/ruby/2.6.0/rubygems.rb:283:in 
`find_spec_for_exe': Could not find 'bundler' (2.1.2) required by your 
/home/runner/work/Telegram_Inspirational_Bot/Telegram_Inspirational_Bot/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.To install the missing version, run `gem install bundler:2.1.2`from/opt/hostedtoolcache/Ruby/2.6.6/x64/lib/ruby/2.6.0/rubygems.rb:302:in`activate_bin_path'from/opt/hostedtoolcache/Ruby/2.6.6/x64/bin/bundle:23:in `<main>'Error: Process completed with exit code 1.

截图CI

我的客户不能运行我的应用程序

我的客户不能 运行 我的应用程序。我确定这是因为这个错误。他在发出拉取请求后收到此错误:

The error: 
bundle install
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Bundler could not find compatible versions for gem "bundle exec rspec":
  In Gemfile:
    telegram-bot-ruby was resolved to 0.13.0, which depends on
      virtus was resolved to 1.0.5, which depends on
        bundle exec rspec

Could not find gem 'bundle exec rspec', which is required by gem 'virtus', in any of the sources.

我真的搞不懂这个问题,因为最初我认为这是 gem 文件中的错误。

Gem 文件:

source 'https://rubygems.org'

git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }

# gem "rails"

gem 'json'
gem 'net-http-persistent', '~> 2.9', '>= 2.9.4'
gem 'rubocop', '~>0.81.0'
gem 'telegram-bot-ruby'

Gem 文件锁:

GEM
  remote: https://rubygems.org/
  specs:
    axiom-types (0.1.1)
      descendants_tracker (~> 0.0.4)
      ice_nine (~> 0.11.0)
      thread_safe (~> 0.3, >= 0.3.1)
    coercible (1.0.0)
      descendants_tracker (~> 0.0.1)
    descendants_tracker (0.0.4)
      thread_safe (~> 0.3, >= 0.3.1)
    equalizer (0.0.11)
    faraday (1.1.0)
      multipart-post (>= 1.2, < 3)
      ruby2_keywords
    ice_nine (0.11.2)
    inflecto (0.0.2)
    json (2.3.1)
    multipart-post (2.1.1)
    net-http-persistent (2.9.4)
    ruby2_keywords (0.0.2)
    telegram-bot-ruby (0.13.0)
      faraday
      inflecto
      virtus
    thread_safe (0.3.6)
    virtus (1.0.5)
      axiom-types (~> 0.1)
      coercible (~> 1.0)
      descendants_tracker (~> 0.0, >= 0.0.3)
      equalizer (~> 0.0, >= 0.0.9)

PLATFORMS
  ruby

DEPENDENCIES
  json
  net-http-persistent (~> 2.9, >= 2.9.4)
  telegram-bot-ruby

BUNDLED WITH
   2.1.4

我认为这里有两个问题。

Bundler未安装(或安装错误版本)

无论系统是什么 运行,测试 / linter(似乎是 Github 的 CI 工具)都没有安装正确版本的捆绑器。尝试添加

gem install bundler:2.1.2

调用您的测试套件的作业。

RSpec 不包含在 Gemfile

RSpec 是必需的依赖项。您似乎在测试作业中安装了 rspec,但它并未包含在您的 Gemfile 中。尝试添加

gem 'rspec'

到你的 Gemfile。

问题出在我使用的 linter.yml 上。 我的一个朋友最近通过修改 linter.yml 来自:

解决了这个问题

名称:Linters

上:pull_request

职位:

rubocop:

name: Rubocop

runs-on: ubuntu-18.04

steps:
  - uses: actions/checkout@v2
  - uses: actions/setup-ruby@v1
    with:
      ruby-version: 2.6.x
  - name: Setup Rubocop
    run: |
      gem install --no-document rubocop:'~>0.81.0' # https://docs.rubocop.org/en/stable/installation/
      [ -f .rubocop.yml ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/ruby/.rubocop.yml
  - name: Rubocop Report
    run: rubocop --color

收件人:

名称:测试

上:pull_request

职位:

rspec:

name: RSpec

runs-on: ubuntu-18.04

steps:

  - uses: actions/checkout@v2

  - uses: actions/setup-ruby@v1
    with:
      ruby-version: 2.6.x
  - name: Setup Bundler
      run:  gem install bundler:2.1.4
  - name: Setup RSpec
    run: |
      [ -f Gemfile ] && bundle --deployment
      gem install --no-document rspec:'~>3.0'
  - name: RSpec Report
    run: rspec --force-color --format documentation

后者有效。