From: "luke-gru (Luke Gruber) via ruby-core" Date: 2026-08-26T14:47:48+00:00 Subject: [ruby-core:126508] [Ruby Bug#22263] NoMethodError: super: no superclass method 'require' for main — raised in a forked child process after a Ractor has exited in the parent (bisected to c59c4d717a) Issue #22263 has been updated by luke-gru (Luke Gruber). I have a reproduction showing the issue: ```ruby module M def foo print "M#foo(orig)" end end class C; include M; end M.prepend(Module.new do def foo print "P#foo(" super print ")" end end) C.new.foo # prime the super cache through the backfilled origin iclass puts puts "after primed cache" module M # zeitwerk wraps `require` with an alias alias_method :old_foo, :foo # captures the *prepended* P#foo instead of original M#foo def foo print "M#foo(" old_foo print ")" end end puts C.new.foo ``` Before c59c4d717a2e687972341eab1574196e97d7d7be, we get: ``` P#foo(M#foo(orig)) after primed cache P#foo(M#foo(orig)) // clearly wrong, the super cache in P#foo was never cleared so it didn't do a new lookup ``` After c59c4d717a2e687972341eab1574196e97d7d7be: ``` P#foo(M#foo(orig)) after primed cache P#foo(M#foo(P#foo(../ruby/test.rb:10:in 'foo': super: no superclass method 'foo' for an instance of C (NoMethodError) from ../ruby/test.rb:21:in 'M#foo' from ../ruby/test.rb:10:in 'foo' from ../ruby/test.rb:25:in '
' ``` Now instead of ignoring the new M#foo, it does a new lookup. However, because the alias in M#foo captured P#foo instead of M's original M#foo, we get an error. This is confusing behavior to me, and I would expect the lookup from M#foo to not go through P, as P shouldn't be an ancestor of M. However, I'm not sure it is a bug as this behavior may be intentional. With the way it currently works though, Module#prepend doesn't play well with aliasing when you alias from the module you prepended to. I'll work around this by not prepending the RactorRequire module to Kernel when we create a Ractor, as this doesn't interact well with Zeitwerk and Rubygems that alias `require`. @jeremyevans0 is this intentional or a bug? ---------------------------------------- Bug #22263: NoMethodError: super: no superclass method 'require' for main ��� raised in a forked child process after a Ractor has exited in the parent (bisected to c59c4d717a) https://bugs.ruby-lang.org/issues/22263#change-118666 * Author: yahonda (Yasuo Honda) * Status: Open * ruby -v: ruby 4.1.0dev (2026-08-25T14:03:04Z master 17026737cc) +PRISM [x86_64-linux] * Backport: 3.3: UNKNOWN, 3.4: UNKNOWN, 4.0: UNKNOWN ---------------------------------------- ### 1. First occurrence in Rails CI https://buildkite.com/rails/rails-nightly/builds/4651#01a016ac-eaf9-4a71-9fb6-1924c8a7b9af (job "activemodel (master-debug)", 2026-08-18, ruby 4.1.0dev (2026-08-18T13:12:35Z master 6b719acc57) +PRISM [x86_64-linux]) Two Active Model tests ran a short-lived Ractor in the test process. A few seconds later, `RailtieTest` forked child processes (Active Support's fork-based test isolation), and the children failed while booting a Rails application. ### 2. Steps to reproduce A Rails checkout is required. Verified with Rails main 0f36bbf72c and the `rubylang/ruby:master` Docker image (ruby 4.1.0dev (2026-08-25T07:50:12Z master 753ace46fe)); it reproduces every run. ``` $ git clone https://github.com/rails/rails && cd rails && bundle install $ cd activemodel $ bundle exec ruby -w -Ilib:test bin/test test/cases/naming_test.rb test/cases/railtie_test.rb ``` ### 3. Expected behavior The forked child behaves like its parent: the Rails application boots and the child exits with status 0 (`child: #`). The test pair reports 0 errors. ### 4. Actual behavior The forked child raises an exception during `require` and exits with status 1; the parent process is unaffected: ``` $ bundle exec ruby -w -Ilib:test bin/test test/cases/naming_test.rb test/cases/railtie_test.rb Source locally installed gems is ignoring # because it is missing extensions Source locally installed gems is ignoring # because it is missing extensions Source locally installed gems is ignoring # because it is missing extensions Source locally installed gems is ignoring # because it is missing extensions Source locally installed gems is ignoring # because it is missing extensions Source locally installed gems is ignoring # because it is missing extensions Run options: --seed 20598 # Running: ............................................................E Error: RailtieTest#test_i18n_customize_full_message_defaults_to_false: NoMethodError: super: no superclass method 'require' for main /home/yahonda/.local/share/mise/installs/ruby/trunk/lib/ruby/gems/4.1.0+4/gems/zeitwerk-2.8.3/lib/zeitwerk/core_ext/kernel.rb:34:in 'require' /home/yahonda/.local/share/mise/installs/ruby/trunk/lib/ruby/gems/4.1.0+4/gems/zeitwerk-2.8.3/lib/zeitwerk/core_ext/kernel.rb:34:in 'Kernel#require' /home/yahonda/src/github.com/rails/rails/railties/lib/rails/application.rb:484:in 'require' /home/yahonda/src/github.com/rails/rails/railties/lib/rails/application.rb:484:in 'Rails::Application#config' /home/yahonda/src/github.com/rails/rails/railties/lib/rails/railtie.rb:148:in 'Rails::Railtie.config' test/cases/railtie_test.rb:16:in 'block in RailtieTest#setup' test/cases/railtie_test.rb:15:in 'Class#initialize' test/cases/railtie_test.rb:15:in 'Class#new' test/cases/railtie_test.rb:15:in 'RailtieTest#setup' bin/test test/cases/railtie_test.rb:36 E Error: RailtieTest#test_secure_password_min_cost_is_false_in_the_development_environment: NoMethodError: super: no superclass method 'require' for main /home/yahonda/.local/share/mise/installs/ruby/trunk/lib/ruby/gems/4.1.0+4/gems/zeitwerk-2.8.3/lib/zeitwerk/core_ext/kernel.rb:34:in 'require' /home/yahonda/.local/share/mise/installs/ruby/trunk/lib/ruby/gems/4.1.0+4/gems/zeitwerk-2.8.3/lib/zeitwerk/core_ext/kernel.rb:34:in 'Kernel#require' /home/yahonda/src/github.com/rails/rails/railties/lib/rails/application.rb:484:in 'require' /home/yahonda/src/github.com/rails/rails/railties/lib/rails/application.rb:484:in 'Rails::Application#config' /home/yahonda/src/github.com/rails/rails/railties/lib/rails/railtie.rb:148:in 'Rails::Railtie.config' test/cases/railtie_test.rb:16:in 'block in RailtieTest#setup' test/cases/railtie_test.rb:15:in 'Class#initialize' test/cases/railtie_test.rb:15:in 'Class#new' test/cases/railtie_test.rb:15:in 'RailtieTest#setup' bin/test test/cases/railtie_test.rb:22 E Error: RailtieTest#test_i18n_customize_full_message_can_be_disabled: NoMethodError: super: no superclass method 'require' for main /home/yahonda/.local/share/mise/installs/ruby/trunk/lib/ruby/gems/4.1.0+4/gems/zeitwerk-2.8.3/lib/zeitwerk/core_ext/kernel.rb:34:in 'require' /home/yahonda/.local/share/mise/installs/ruby/trunk/lib/ruby/gems/4.1.0+4/gems/zeitwerk-2.8.3/lib/zeitwerk/core_ext/kernel.rb:34:in 'Kernel#require' /home/yahonda/src/github.com/rails/rails/railties/lib/rails/application.rb:484:in 'require' /home/yahonda/src/github.com/rails/rails/railties/lib/rails/application.rb:484:in 'Rails::Application#config' /home/yahonda/src/github.com/rails/rails/railties/lib/rails/railtie.rb:148:in 'Rails::Railtie.config' test/cases/railtie_test.rb:16:in 'block in RailtieTest#setup' test/cases/railtie_test.rb:15:in 'Class#initialize' test/cases/railtie_test.rb:15:in 'Class#new' test/cases/railtie_test.rb:15:in 'RailtieTest#setup' bin/test test/cases/railtie_test.rb:42 E Error: RailtieTest#test_secure_password_min_cost_is_true_in_the_test_environment: NoMethodError: super: no superclass method 'require' for main /home/yahonda/.local/share/mise/installs/ruby/trunk/lib/ruby/gems/4.1.0+4/gems/zeitwerk-2.8.3/lib/zeitwerk/core_ext/kernel.rb:34:in 'require' /home/yahonda/.local/share/mise/installs/ruby/trunk/lib/ruby/gems/4.1.0+4/gems/zeitwerk-2.8.3/lib/zeitwerk/core_ext/kernel.rb:34:in 'Kernel#require' /home/yahonda/src/github.com/rails/rails/railties/lib/rails/application.rb:484:in 'require' /home/yahonda/src/github.com/rails/rails/railties/lib/rails/application.rb:484:in 'Rails::Application#config' /home/yahonda/src/github.com/rails/rails/railties/lib/rails/railtie.rb:148:in 'Rails::Railtie.config' test/cases/railtie_test.rb:16:in 'block in RailtieTest#setup' test/cases/railtie_test.rb:15:in 'Class#initialize' test/cases/railtie_test.rb:15:in 'Class#new' test/cases/railtie_test.rb:15:in 'RailtieTest#setup' bin/test test/cases/railtie_test.rb:29 E Error: RailtieTest#test_i18n_customize_full_message_can_be_enabled: NoMethodError: super: no superclass method 'require' for main /home/yahonda/.local/share/mise/installs/ruby/trunk/lib/ruby/gems/4.1.0+4/gems/zeitwerk-2.8.3/lib/zeitwerk/core_ext/kernel.rb:34:in 'require' /home/yahonda/.local/share/mise/installs/ruby/trunk/lib/ruby/gems/4.1.0+4/gems/zeitwerk-2.8.3/lib/zeitwerk/core_ext/kernel.rb:34:in 'Kernel#require' /home/yahonda/src/github.com/rails/rails/railties/lib/rails/application.rb:484:in 'require' /home/yahonda/src/github.com/rails/rails/railties/lib/rails/application.rb:484:in 'Rails::Application#config' /home/yahonda/src/github.com/rails/rails/railties/lib/rails/railtie.rb:148:in 'Rails::Railtie.config' test/cases/railtie_test.rb:16:in 'block in RailtieTest#setup' test/cases/railtie_test.rb:15:in 'Class#initialize' test/cases/railtie_test.rb:15:in 'Class#new' test/cases/railtie_test.rb:15:in 'RailtieTest#setup' bin/test test/cases/railtie_test.rb:49 Finished in 0.088916s, 731.0243 runs/s, 820.9965 assertions/s. 65 runs, 73 assertions, 0 failures, 5 errors, 0 skips $ ``` ### 5. Bisect result ``` c59c4d717a2e687972341eab1574196e97d7d7be introduces this behavior. ``` -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/