Bug #18608


`require': cannot load such file -- ripper (LoadError) after `make distclean`

Added by brandonrdn (Brandon Riden) about 2 years ago. Updated about 2 years ago.

Target version:
ruby -v:
ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-linux]


When compiling multiple instances of Ruby (In our case, two separate prefixes), using the following build code causes the 2nd installed Ruby to throw an error on any ruby/irb call.

Changing the code to delete the extracted ruby-3.1.0 folder and re-extract from the tarball fixes this issue, so I believe it's something in the make distclean that's causing issues. This was not an issue for ruby 2.6.3 or 2.6.7, just on 3.0+ versions.

Build code:

# Build Ruby
RUN set -e ; \
    . /etc/profile.d/ ; \
    wget -q${RUBY_VERSION%.*}/ruby-${RUBY_VERSION}.tar.gz ; \
    tar zxf ruby-${RUBY_VERSION}.tar.gz ; \
    rm -f ruby-${RUBY_VERSION}.tar.gz ; \
    pushd ruby-${RUBY_VERSION} ; \
    type -p gcc ; \
    for prefix in /usr/local /opt/vendored_ruby ; do \
        ./configure --prefix=$prefix --with-compress-debug-sections=no --disable-install-doc ; \
        make ; \
        make install ; \
        make distclean ; \
    done ; \
    popd ; \
    ccache --show-stats ; \
    rm -rf ruby-${RUBY_VERSION} /root/.ccache


<internal:/opt/vendored_ruby/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- ripper (LoadError)
        from <internal:/opt/vendored_ruby/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
        from /opt/vendored_ruby/lib/ruby/3.1.0/irb.rb:12:in `<top (required)>'
        from <internal:/opt/vendored_ruby/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
        from <internal:/opt/vendored_ruby/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
        from /opt/vendored_ruby/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:9:in `<top (required)>'
        from /opt/vendored_ruby/bin/irb:25:in `load'
        from /opt/vendored_ruby/bin/irb:25:in `<main>'
[root@cc75157e1b69 /]# /usr/local/bin/irb 

This error pops up on any reference to ruby or irb, including the base commands.

Steps to reproduce:

  • Compile/make/make install Ruby 3.0+ with the 1st prefix
  • Run make distclean
  • Compile/make/make install Ruby 3.0+ with the 2nd prefix
  • run the irb and ruby commands in both paths.

Updated by xtkoba (Tee KOBAYASHI) about 2 years ago

I guess this is because either bison is not installed in the build environment or the environment variable YACC is not correctly set. Note that make distclean among other things removes ext/ripper/ripper.c which requires YACC (typically bison) to re-generate.

FWIW, in my environment in-place make distclean followed by ./configure && make results in another build failure due to Bison version mismatch with pre-generated parse.[ch], but I suppose that is a separate issue (a workaround is to rm -f parse.[ch]).


Also available in: Atom PDF