Skip to content
  • David Rodríguez's avatar
    45b51143
    [rubygems/rubygems] Improve install advice when some gems are not found · 45b51143
    David Rodríguez authored
    This problem is quite specific to our dev environment, but I guess the
    fix could be handy for other situations.
    
    After merging a change to treat default gems as regular gems, I get this
    when trying to run `rubocop` on our repo:
    
    ```
    $ bin/rubocop  --only Performance/RegexpMatch
    Could not find json-2.6.3 in locally installed gems
    Run `bundle install --gemfile /Users/deivid/code/rubygems/rubygems/tool/bundler/lint_gems.rb` to install missing gems.
    ```
    
    However, when running the suggested command, nothing changes and I still
    get the same error:
    
    ```
    $ bundle install --gemfile /Users/deivid/code/rubygems/rubygems/tool/bundler/lint_gems.rb
    Using ast 2.4.2
    Using bundler 2.4.10
    Using json 2.6.3
    Using parallel 1.23.0
    Using racc 1.7.1
    Using parser 3.2.2.3
    Using rainbow 3.1.1
    Using regexp_parser 2.8.1
    Using rexml 3.2.5
    Using rubocop-ast 1.29.0
    Using ruby-progressbar 1.13.0
    Using unicode-display_width 2.4.2
    Using rubocop 1.52.1
    Using rubocop-performance 1.14.2
    Bundle complete! 2 Gemfile dependencies, 14 gems now installed.
    Use `bundle info [gemname]` to see where a bundled gem is installed.
    
    $ bin/rubocop  --only Performance/RegexpMatch
    Could not find json-2.6.3 in locally installed gems
    Run `bundle install --gemfile /Users/deivid/code/rubygems/rubygems/tool/bundler/lint_gems.rb` to install missing gems.
    ```
    
    The problem is that our `bin/rubocop` script uses the development
    version of Bundler (which has the change causing the problem), but the
    advice recommands the default version of Bundler, which does not yet
    have the change.
    
    This commit changes the advice to recommend to use the same version of
    Bundler that run into the problem in the first place.
    
    So in the above situation you now get:
    
    ```
    $ bin/rubocop  --only Performance/RegexpMatch
    Could not find json-2.6.3 in locally installed gems
    Run `/Users/deivid/code/rubygems/rubygems/bundler/exe/bundle install --gemfile /Users/deivid/code/rubygems/rubygems/tool/bundler/lint_gems.rb` to install missing gems.
    ```
    
    And running that fixes the problem:
    
    ```
    $ /Users/deivid//rubygems/rubygems/bundler/exe/bundle install --gemfile /Users/deivid/code/rubygems/rubygems/tool/bundler/lint_gems.rb
    Fetching gem metadata from https://rubygems.org/.........
    Fetching json 2.6.3
    Installing json 2.6.3 with native extensions
    Bundle complete! 2 Gemfile dependencies, 14 gems now installed.
    Use `bundle info [gemname]` to see where a bundled gem is installed.
    ```
    
    https://github.com/rubygems/rubygems/commit/10a9588c6d
    45b51143
    [rubygems/rubygems] Improve install advice when some gems are not found
    David Rodríguez authored
    This problem is quite specific to our dev environment, but I guess the
    fix could be handy for other situations.
    
    After merging a change to treat default gems as regular gems, I get this
    when trying to run `rubocop` on our repo:
    
    ```
    $ bin/rubocop  --only Performance/RegexpMatch
    Could not find json-2.6.3 in locally installed gems
    Run `bundle install --gemfile /Users/deivid/code/rubygems/rubygems/tool/bundler/lint_gems.rb` to install missing gems.
    ```
    
    However, when running the suggested command, nothing changes and I still
    get the same error:
    
    ```
    $ bundle install --gemfile /Users/deivid/code/rubygems/rubygems/tool/bundler/lint_gems.rb
    Using ast 2.4.2
    Using bundler 2.4.10
    Using json 2.6.3
    Using parallel 1.23.0
    Using racc 1.7.1
    Using parser 3.2.2.3
    Using rainbow 3.1.1
    Using regexp_parser 2.8.1
    Using rexml 3.2.5
    Using rubocop-ast 1.29.0
    Using ruby-progressbar 1.13.0
    Using unicode-display_width 2.4.2
    Using rubocop 1.52.1
    Using rubocop-performance 1.14.2
    Bundle complete! 2 Gemfile dependencies, 14 gems now installed.
    Use `bundle info [gemname]` to see where a bundled gem is installed.
    
    $ bin/rubocop  --only Performance/RegexpMatch
    Could not find json-2.6.3 in locally installed gems
    Run `bundle install --gemfile /Users/deivid/code/rubygems/rubygems/tool/bundler/lint_gems.rb` to install missing gems.
    ```
    
    The problem is that our `bin/rubocop` script uses the development
    version of Bundler (which has the change causing the problem), but the
    advice recommands the default version of Bundler, which does not yet
    have the change.
    
    This commit changes the advice to recommend to use the same version of
    Bundler that run into the problem in the first place.
    
    So in the above situation you now get:
    
    ```
    $ bin/rubocop  --only Performance/RegexpMatch
    Could not find json-2.6.3 in locally installed gems
    Run `/Users/deivid/code/rubygems/rubygems/bundler/exe/bundle install --gemfile /Users/deivid/code/rubygems/rubygems/tool/bundler/lint_gems.rb` to install missing gems.
    ```
    
    And running that fixes the problem:
    
    ```
    $ /Users/deivid//rubygems/rubygems/bundler/exe/bundle install --gemfile /Users/deivid/code/rubygems/rubygems/tool/bundler/lint_gems.rb
    Fetching gem metadata from https://rubygems.org/.........
    Fetching json 2.6.3
    Installing json 2.6.3 with native extensions
    Bundle complete! 2 Gemfile dependencies, 14 gems now installed.
    Use `bundle info [gemname]` to see where a bundled gem is installed.
    ```
    
    https://github.com/rubygems/rubygems/commit/10a9588c6d
Loading