Skip to content
This repository has been archived by the owner on Apr 14, 2021. It is now read-only.

can't run bundle exec irb with Ruby 2.6 #6929

Closed
Fryguy opened this issue Jan 23, 2019 · 4 comments · Fixed by #6963
Closed

can't run bundle exec irb with Ruby 2.6 #6929

Fryguy opened this issue Jan 23, 2019 · 4 comments · Fixed by #6963

Comments

@Fryguy
Copy link

Fryguy commented Jan 23, 2019

To reproduce...

> mkdir vanilla; cd vanilla
> touch Gemfile
> bundle update
The Gemfile specifies no dependencies
Resolving dependencies...
Bundle updated!
> gem list bundler

*** LOCAL GEMS ***

bundler (2.0.1, default: 1.17.2)
> cat Gemfile.lock
GEM
  specs:

PLATFORMS
  ruby
  x86_64-darwin-17

DEPENDENCIES

BUNDLED WITH
   2.0.1
> bundle exec irb
bundler: failed to load command: irb (/Users/jfrey/.rubies/ruby-2.6.0/bin/irb)
Gem::Exception: can't find executable irb for gem irb. irb is not currently included in the bundle, perhaps you meant to add it to your Gemfile?
  /Users/jfrey/.gem/ruby/2.6.0/gems/bundler-2.0.1/lib/bundler/rubygems_integration.rb:462:in `block in replace_bin_path'
  /Users/jfrey/.gem/ruby/2.6.0/gems/bundler-2.0.1/lib/bundler/rubygems_integration.rb:482:in `block in replace_bin_path'
  /Users/jfrey/.rubies/ruby-2.6.0/bin/irb:23:in `<top (required)>'

Similarly, I can't do the manual approach either, but I get a different error because it seems to want to load 1.17.2 regardless.

> irb
irb(main):001:0> require 'bundler/setup'
You must use Bundler 2 or greater with this lockfile.
# Note that this immediately exits irb

> irb
irb(main):001:0> require 'bundler'
=> true
irb(main):002:0> Bundler::VERSION
=> "1.17.2"

Probably related to #6913

@Fryguy
Copy link
Author

Fryguy commented Jan 23, 2019

Same steps on Ruby 2.5.3:

> bundle exec irb
irb(main):001:0> Bundler::VERSION
=> "2.0.1"
> irb
irb(main):001:0> require 'bundler/setup'
=> true

@HappySoft
Copy link

HappySoft commented Jan 30, 2019

That's not really a bundler issue.
Since Ruby 2.6.0 irb is not bundled anymore, but used as a gem (https://stdgems.org/2.6.0/, https://bugs.ruby-lang.org/issues/15503)

So we have to add the following line to Gemfile:

gem 'irb', require: false

Then bundle exec irb would work fine.

@Fryguy
Copy link
Author

Fryguy commented Jan 31, 2019

wow TIL. Thanks! Should this be documented in bundler docs or FAQ?

@deivid-rodriguez
Copy link
Member

I see where the error comes from but I think we should fix it. The purpose of default gems is that they are always available. Bundler should respect that.

ghost pushed a commit that referenced this issue Apr 1, 2019
6963: Allow to `bundle exec` default gems r=deivid-rodriguez a=deivid-rodriguez

### What was the end-user problem that led to this PR?

The problem was that since `irb` and others were moved to default gems, users cannot directly use them in a bundler context, unless they add it to their gemfiles. In my opinion, this completely defeats the purpose of default gems, and makes bundler degrade the user experience instead of making it better.

### What was your diagnosis of the problem?

My diagnosis was that when bundler replaces the set of gems known to rubygems, it restricts the world to what's in the Gemfile (or resolved from it), and that doesn't include default gems.

### What is your fix for the problem, implemented in this PR?

My fix is to also include the set of default gems, unless they are already included in the gemfile dependencies.

### Why did you choose this fix out of the possible options?

I chose this fix because it's reasonably simple and I think it shouldn't affect how other parts of bundler function.

Fixes #6929.
Fixes https://bugs.ruby-lang.org/issues/15503.

Co-authored-by: David Rodríguez <deivid.rodriguez@riseup.net>
@ghost ghost closed this as completed in #6963 Apr 1, 2019
colby-swandale pushed a commit that referenced this issue Apr 4, 2019
6963: Allow to `bundle exec` default gems r=deivid-rodriguez a=deivid-rodriguez

### What was the end-user problem that led to this PR?

The problem was that since `irb` and others were moved to default gems, users cannot directly use them in a bundler context, unless they add it to their gemfiles. In my opinion, this completely defeats the purpose of default gems, and makes bundler degrade the user experience instead of making it better.

### What was your diagnosis of the problem?

My diagnosis was that when bundler replaces the set of gems known to rubygems, it restricts the world to what's in the Gemfile (or resolved from it), and that doesn't include default gems.

### What is your fix for the problem, implemented in this PR?

My fix is to also include the set of default gems, unless they are already included in the gemfile dependencies.

### Why did you choose this fix out of the possible options?

I chose this fix because it's reasonably simple and I think it shouldn't affect how other parts of bundler function.

Fixes #6929.
Fixes https://bugs.ruby-lang.org/issues/15503.

Co-authored-by: David Rodríguez <deivid.rodriguez@riseup.net>
(cherry picked from commit 3b6c6e3)
jfly added a commit to jfly/worldcubeassociation.org that referenced this issue Jul 13, 2019
Ever since upgrading to Ruby 2.6, I've experienced the following crash
when running `bin/rails console`:

```
$ bin/rails c
warning package.json: No license field
warning No license field
Running via Spring preloader in process 12917
Traceback (most recent call last):
	28: from -e:1:in `<main>'
	27: from /usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	26: from /usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	25: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:285:in `load'
	24: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
	23: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:285:in `block in load'
	22: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:285:in `load'
	21: from /home/jeremy/gitting/worldcubeassociation.org/WcaOnRails/bin/rails:11:in `<top (required)>'
	20: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
	19: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
	18: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require'
	17: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
	16: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/commands.rb:18:in `<top (required)>'
	15: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command.rb:44:in `invoke'
	14: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command.rb:70:in `find_by_namespace'
	13: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command/behavior.rb:79:in `lookup'
	12: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command/behavior.rb:79:in `each'
	11: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command/behavior.rb:80:in `block in lookup'
	10: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command/behavior.rb:80:in `each'
	 9: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command/behavior.rb:84:in `block (2 levels) in lookup'
	 8: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
	 7: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
	 6: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require'
	 5: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
	 4: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/commands/console/console_command.rb:3:in `<top (required)>'
	 3: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
	 2: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
	 1: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require'
/home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require': cannot load such file -- irb (LoadError)
```

Some Googling let me on the following journey:
  - https://www.reddit.com/r/rails/comments/akhmae/ruby_26_breaks_rails_console/ ->
  - Shopify/bootsnap#223 ->
  - rubygems/bundler#6929 (comment)

So, this appears to be due to a bundler change, and one workaround is to
explicitly add `irb` to your Gemfile. It seems like this may be fixed in
a future version of bundler: rubygems/bundler#6963.
jfly added a commit to jfly/worldcubeassociation.org that referenced this issue Jul 13, 2019
Ever since upgrading to Ruby 2.6 (see
thewca#3873), I've
experienced the following crash
when running `bin/rails console`:

```
$ bin/rails c
warning package.json: No license field
warning No license field
Running via Spring preloader in process 12917
Traceback (most recent call last):
	28: from -e:1:in `<main>'
	27: from /usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	26: from /usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	25: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:285:in `load'
	24: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
	23: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:285:in `block in load'
	22: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:285:in `load'
	21: from /home/jeremy/gitting/worldcubeassociation.org/WcaOnRails/bin/rails:11:in `<top (required)>'
	20: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
	19: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
	18: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require'
	17: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
	16: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/commands.rb:18:in `<top (required)>'
	15: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command.rb:44:in `invoke'
	14: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command.rb:70:in `find_by_namespace'
	13: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command/behavior.rb:79:in `lookup'
	12: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command/behavior.rb:79:in `each'
	11: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command/behavior.rb:80:in `block in lookup'
	10: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command/behavior.rb:80:in `each'
	 9: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command/behavior.rb:84:in `block (2 levels) in lookup'
	 8: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
	 7: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
	 6: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require'
	 5: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
	 4: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/commands/console/console_command.rb:3:in `<top (required)>'
	 3: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
	 2: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
	 1: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require'
/home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require': cannot load such file -- irb (LoadError)
```

At first I thought this was a quirk of my local environment, but some
Googling let me on the following journey:
  - https://www.reddit.com/r/rails/comments/akhmae/ruby_26_breaks_rails_console/ ->
  - Shopify/bootsnap#223 ->
  - rubygems/bundler#6929 (comment)

So, this appears to be due to a bundler change, and one workaround is to
explicitly add `irb` to your Gemfile. It seems like this may be fixed in
a future version of bundler: rubygems/bundler#6963.
jfly added a commit to thewca/worldcubeassociation.org that referenced this issue Jul 28, 2019
Ever since upgrading to Ruby 2.6 (see
#3873), I've
experienced the following crash
when running `bin/rails console`:

```
$ bin/rails c
warning package.json: No license field
warning No license field
Running via Spring preloader in process 12917
Traceback (most recent call last):
	28: from -e:1:in `<main>'
	27: from /usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	26: from /usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	25: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:285:in `load'
	24: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
	23: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:285:in `block in load'
	22: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:285:in `load'
	21: from /home/jeremy/gitting/worldcubeassociation.org/WcaOnRails/bin/rails:11:in `<top (required)>'
	20: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
	19: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
	18: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require'
	17: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
	16: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/commands.rb:18:in `<top (required)>'
	15: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command.rb:44:in `invoke'
	14: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command.rb:70:in `find_by_namespace'
	13: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command/behavior.rb:79:in `lookup'
	12: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command/behavior.rb:79:in `each'
	11: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command/behavior.rb:80:in `block in lookup'
	10: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command/behavior.rb:80:in `each'
	 9: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/command/behavior.rb:84:in `block (2 levels) in lookup'
	 8: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
	 7: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
	 6: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require'
	 5: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
	 4: from /home/jeremy/.gem/ruby/2.6.0/gems/railties-5.2.3/lib/rails/commands/console/console_command.rb:3:in `<top (required)>'
	 3: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
	 2: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
	 1: from /home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require'
/home/jeremy/.gem/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require': cannot load such file -- irb (LoadError)
```

At first I thought this was a quirk of my local environment, but some
Googling let me on the following journey:
  - https://www.reddit.com/r/rails/comments/akhmae/ruby_26_breaks_rails_console/ ->
  - Shopify/bootsnap#223 ->
  - rubygems/bundler#6929 (comment)

So, this appears to be due to a bundler change, and one workaround is to
explicitly add `irb` to your Gemfile. It seems like this may be fixed in
a future version of bundler: rubygems/bundler#6963.
postmodern added a commit to postmodern/rubygems-tasks that referenced this issue Mar 2, 2020
This issue was closed.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants