passenger-docker icon indicating copy to clipboard operation
passenger-docker copied to clipboard

irb/rails console RC file error

Open LocoDelAssembly opened this issue 11 months ago • 9 comments

I've noticed that since ruby33 release invoking "bundle exec irb" or "bundle exec rails c" causes this error:

$ bundle exec irb
Error loading RC file '/usr/local/rvm/rubies/ruby-3.3.0/.irbrc':
/usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundled_gems.rb:74:in `require': cannot load such file -- /home/app/irbrc (LoadError)
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require'
	from /usr/local/rvm/rubies/ruby-3.3.0/.irbrc:9:in `<top (required)>'
.
.
.

Is this a bug? Any advice on how to make this error stop? Both, irb and rails c seem to work fine despite this, but would be nicer if no errors occur.

Thanks

Last Good version:

$ echo "exit" | docker run --rm phusion/passenger-ruby32:latest bash -c "bundle init; bundle exec irb" 
Writing new Gemfile to //Gemfile
Switch to inspect mode.

Current version:

$ echo "exit" | docker run --rm phusion/passenger-ruby33:latest bash -c "bundle init; bundle exec irb"
Writing new Gemfile to //Gemfile
Error loading RC file '/usr/local/rvm/rubies/ruby-3.3.0/.irbrc':
/usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundled_gems.rb:74:in `require': cannot load such file -- /root/irbrc (LoadError)
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require'
	from /usr/local/rvm/rubies/ruby-3.3.0/.irbrc:9:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb/init.rb:399:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb/init.rb:399:in `run_config'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb/init.rb:49:in `setup'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb.rb:896:in `start'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/gems/3.3.0/gems/irb-1.11.0/exe/irb:9:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/irb:25:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/irb:25:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli/exec.rb:58:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli/exec.rb:58:in `kernel_load'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli/exec.rb:23:in `run'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli.rb:451:in `exec'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli.rb:34:in `dispatch'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli.rb:28:in `start'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/friendly_errors.rb:117:in `with_friendly_errors'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/bundle:25:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/bundle:25:in `<main>'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/ruby_executable_hooks:22:in `eval'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/ruby_executable_hooks:22:in `<main>'
Switch to inspect mode.

Also happens with full version:

$ echo "exit" | docker run --rm phusion/passenger-full:latest bash -c "bundle init; bundle exec irb"
Writing new Gemfile to //Gemfile
Error loading RC file '/usr/local/rvm/rubies/ruby-3.3.0/.irbrc':
/usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundled_gems.rb:74:in `require': cannot load such file -- /root/irbrc (LoadError)
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require'
	from /usr/local/rvm/rubies/ruby-3.3.0/.irbrc:9:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb/init.rb:399:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb/init.rb:399:in `run_config'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb/init.rb:49:in `setup'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb.rb:896:in `start'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/gems/3.3.0/gems/irb-1.11.0/exe/irb:9:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/irb:25:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/irb:25:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli/exec.rb:58:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli/exec.rb:58:in `kernel_load'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli/exec.rb:23:in `run'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli.rb:451:in `exec'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli.rb:34:in `dispatch'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli.rb:28:in `start'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/friendly_errors.rb:117:in `with_friendly_errors'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/bundle:25:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/bundle:25:in `<main>'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/ruby_executable_hooks:22:in `eval'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/ruby_executable_hooks:22:in `<main>'
Switch to inspect mode.

LocoDelAssembly avatar Mar 22 '24 17:03 LocoDelAssembly

As a workaround, you can create a /home/app/irbrc file in your Dockerfile, I'll add one to the images in the next update.

CamJN avatar Mar 23 '24 18:03 CamJN

Doesn't seem to make a difference. I'm doing something wrong?

$ docker build -t test .                                                   
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
            Install the buildx component to build images with BuildKit:
            https://docs.docker.com/go/buildx/

Sending build context to Docker daemon  2.048kB
Step 1/7 : FROM phusion/passenger-ruby33:latest
 ---> dcbcf5df625a
Step 2/7 : RUN touch /home/app/irbrc
 ---> Using cache
 ---> cbd32716d1b3
Step 3/7 : RUN touch /home/app/.irbrc
 ---> Running in 4552e8f852bc
Removing intermediate container 4552e8f852bc
 ---> ad7423fda401
Step 4/7 : RUN touch /root/irbrc
 ---> Running in 3ede8d3bbd24
Removing intermediate container 3ede8d3bbd24
 ---> 7dd831c63caf
Step 5/7 : RUN touch /root/.irbrc
 ---> Running in 80299bd07382
Removing intermediate container 80299bd07382
 ---> 5704c602e749
Step 6/7 : RUN touch /usr/local/rvm/rubies/ruby-3.3.0/.irbrc
 ---> Running in e23a0276ef9a
Removing intermediate container e23a0276ef9a
 ---> 3b2fc40c3b4a
Step 7/7 : RUN touch /usr/local/rvm/rubies/ruby-3.3.0/irbrc
 ---> Running in ca0f13802601
Removing intermediate container ca0f13802601
 ---> 138b83da691e
Successfully built 138b83da691e
Successfully tagged test:latest

$ echo "exit" | docker run --rm test bash -c "bundle init; bundle exec irb"
Writing new Gemfile to //Gemfile
Error loading RC file '/usr/local/rvm/rubies/ruby-3.3.0/.irbrc':
/usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundled_gems.rb:74:in `require': cannot load such file -- /root/irbrc (LoadError)
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require'
	from /usr/local/rvm/rubies/ruby-3.3.0/.irbrc:9:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb/init.rb:399:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb/init.rb:399:in `run_config'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb/init.rb:49:in `setup'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb.rb:896:in `start'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/gems/3.3.0/gems/irb-1.11.0/exe/irb:9:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/irb:25:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/irb:25:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli/exec.rb:58:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli/exec.rb:58:in `kernel_load'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli/exec.rb:23:in `run'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli.rb:451:in `exec'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli.rb:34:in `dispatch'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli.rb:28:in `start'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/friendly_errors.rb:117:in `with_friendly_errors'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/bundle:25:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/bundle:25:in `<main>'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/ruby_executable_hooks:22:in `eval'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/ruby_executable_hooks:22:in `<main>'
Switch to inspect mode.

$ echo "exit" | docker run -u9999 --rm test bash -c "cd /home/app; bundle init; bundle exec irb"
Writing new Gemfile to /home/app/Gemfile
Error loading RC file '/usr/local/rvm/rubies/ruby-3.3.0/.irbrc':
/usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundled_gems.rb:74:in `require': cannot load such file -- /home/app/irbrc (LoadError)
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require'
	from /usr/local/rvm/rubies/ruby-3.3.0/.irbrc:9:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb/init.rb:399:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb/init.rb:399:in `run_config'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb/init.rb:49:in `setup'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/irb.rb:896:in `start'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/gems/3.3.0/gems/irb-1.11.0/exe/irb:9:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/irb:25:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/irb:25:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli/exec.rb:58:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli/exec.rb:58:in `kernel_load'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli/exec.rb:23:in `run'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli.rb:451:in `exec'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli.rb:34:in `dispatch'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/cli.rb:28:in `start'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/3.3.0/bundler/friendly_errors.rb:117:in `with_friendly_errors'
	from /usr/local/rvm/rubies/ruby-3.3.0/lib/ruby/gems/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/bundle:25:in `load'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/bundle:25:in `<main>'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/ruby_executable_hooks:22:in `eval'
	from /usr/local/rvm/rubies/ruby-3.3.0/bin/ruby_executable_hooks:22:in `<main>'
Switch to inspect mode.

Problem seems to be gone if I use -lc, but one typically does not invoke commands forcing a different shell with different options.

echo "exit" | docker run --rm phusion/passenger-ruby33:latest bash -lc "bundle init; bundle exec irb"
Writing new Gemfile to //Gemfile
Switch to inspect mode.

LocoDelAssembly avatar Mar 25 '24 13:03 LocoDelAssembly

This is saying the root user doesn't have the irbrc file, wheras before it was the app user, you can probably run as app without issue.

CamJN avatar Mar 25 '24 17:03 CamJN

If you mean echo "exit" | docker run -u9999 --rm test bash -c "cd /home/app; bundle init; bundle exec irb", it also fails with differerent path (/home/app/irbrc, you may see that above).

This is the Dockefile used:

FROM phusion/passenger-ruby33:latest

RUN touch /home/app/irbrc
RUN touch /home/app/.irbrc
RUN touch /root/irbrc
RUN touch /root/.irbrc
RUN touch /usr/local/rvm/rubies/ruby-3.3.0/.irbrc
RUN touch /usr/local/rvm/rubies/ruby-3.3.0/irbrc

LocoDelAssembly avatar Mar 25 '24 18:03 LocoDelAssembly

My apologies for missing that you ran the test as the app user too. I've done more digging, and while i don't have a solution yet i did notice that the issue is the new version of irb included with ruby 3.3, you can replicate the problem in the phusion/passenger-ruby32:latest image by installing the latest irb:

root@5682e16462c2:/# bundle add irb
Fetching gem metadata from https://rubygems.org/..........
Resolving dependencies...                
Fetching gem metadata from https://rubygems.org/........
Resolving dependencies...                
Fetching stringio 3.1.0                  
Fetching io-console 0.7.2                
Installing stringio 3.1.0 with native extensions
Installing io-console 0.7.2 with native extensions
Fetching psych 5.1.2
Installing psych 5.1.2 with native extensions
Fetching reline 0.5.0
Installing reline 0.5.0
Fetching rdoc 6.6.3.1
Installing rdoc 6.6.3.1
Fetching irb 1.12.0
Installing irb 1.12.0
root@5682e16462c2:/# bundle exec irb
Error loading RC file '/usr/local/rvm/rubies/ruby-3.2.3/.irbrc':
<internal:/usr/local/rvm/rubies/ruby-3.2.3/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:in `require': cannot load such file -- /root/irbrc (LoadError)
	from <internal:/usr/local/rvm/rubies/ruby-3.2.3/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:in `require'
	from /usr/local/rvm/rubies/ruby-3.2.3/.irbrc:9:in `<top (required)>'
	from /usr/local/rvm/gems/ruby-3.2.3/gems/irb-1.12.0/lib/irb/init.rb:401:in `load'
	from /usr/local/rvm/gems/ruby-3.2.3/gems/irb-1.12.0/lib/irb/init.rb:401:in `block in run_config'
	from /usr/local/rvm/gems/ruby-3.2.3/gems/irb-1.12.0/lib/irb/init.rb:398:in `each'
	from /usr/local/rvm/gems/ruby-3.2.3/gems/irb-1.12.0/lib/irb/init.rb:398:in `run_config'
	from /usr/local/rvm/gems/ruby-3.2.3/gems/irb-1.12.0/lib/irb/init.rb:54:in `setup'
	from /usr/local/rvm/gems/ruby-3.2.3/gems/irb-1.12.0/lib/irb.rb:877:in `start'
	from /usr/local/rvm/gems/ruby-3.2.3/gems/irb-1.12.0/exe/irb:9:in `<top (required)>'
	from /usr/local/rvm/gems/ruby-3.2.3/bin/irb:25:in `load'
	from /usr/local/rvm/gems/ruby-3.2.3/bin/irb:25:in `<main>'
	from /usr/local/rvm/gems/ruby-3.2.3/bin/ruby_executable_hooks:22:in `eval'
	from /usr/local/rvm/gems/ruby-3.2.3/bin/ruby_executable_hooks:22:in `<main>'

CamJN avatar Mar 25 '24 18:03 CamJN

The change appears deliberate: https://github.com/ruby/irb/pull/817

So rvm's .irbrc file is not compatible with irb 1.11.0.

Still not sure why it can't load the file even if it exists and has correct permissions.

CamJN avatar Mar 25 '24 18:03 CamJN

It's because require expects an .rb extension and irbrc doesn't have one. rvm should probably use load instead.

CamJN avatar Mar 25 '24 19:03 CamJN

I've filed https://github.com/rvm/rvm/issues/5449 to get this fixed upstream. in the meantime changing rvm's /usr/local/rvm/rubies/ruby-3.3.0/.irbrc to use load instead of require worked for me.

CamJN avatar Mar 25 '24 19:03 CamJN

Perfect, thanks @CamJN!

LocoDelAssembly avatar Mar 27 '24 22:03 LocoDelAssembly