Undefined method `timeout=' for Regexp:Class

AI-generated summary

User Samir_Sabri encountered an “undefined method `timeout=’ for Regexp:Class” error when trying to upgrade Discourse. sam suspected this was due to an unsupported Ruby version, as Discourse only supports Ruby 3.2.

Samir_Sabri was able to manually update the install using a guide from https://meta.discourse.org/t/manually-update-discourse-and-docker-image-to-latest/23325. david acknowledged the issue and noted that it was due to Docker Manager not yet being updated to reflect the minimum required version. A pull request has been made to address this and ensure users are prompted to run a CLI rebuild before upgrading Discourse.

Hello

I tried to upgrade using website admin online, but it failed, and I am getting this error:

/var/www/discourse/config/initializers/100-regex-timeout.rb:3:in `<main>': undefined method `timeout=' for Regexp:Class (NoMethodError)

Regexp.timeout = GlobalSetting.regex_timeout_seconds.to_i if GlobalSetting.regex_timeout_seconds.present?
      ^^^^^^^^^^
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/engine.rb:667:in `load'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/engine.rb:667:in `block in load_config_initializer'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activesupport-7.0.4.3/lib/active_support/notifications.rb:208:in `instrument'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/engine.rb:666:in `load_config_initializer'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/engine.rb:620:in `block (2 levels) in <class:Engine>'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/engine.rb:619:in `each'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/engine.rb:619:in `block in <class:Engine>'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:32:in `instance_exec'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:32:in `run'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:61:in `block in run_initializers'
        from /usr/local/lib/ruby/3.1.0/tsort.rb:228:in `block in tsort_each'
        from /usr/local/lib/ruby/3.1.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
        from /usr/local/lib/ruby/3.1.0/tsort.rb:422:in `block (2 levels) in each_strongly_connected_component_from'
        from /usr/local/lib/ruby/3.1.0/tsort.rb:431:in `each_strongly_connected_component_from'
        from /usr/local/lib/ruby/3.1.0/tsort.rb:421:in `block in each_strongly_connected_component_from'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:50:in `each'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:50:in `tsort_each_child'
        from /usr/local/lib/ruby/3.1.0/tsort.rb:415:in `call'
        from /usr/local/lib/ruby/3.1.0/tsort.rb:415:in `each_strongly_connected_component_from'
        from /usr/local/lib/ruby/3.1.0/tsort.rb:349:in `block in each_strongly_connected_component'
        from /usr/local/lib/ruby/3.1.0/tsort.rb:347:in `each'
        from /usr/local/lib/ruby/3.1.0/tsort.rb:347:in `call'
        from /usr/local/lib/ruby/3.1.0/tsort.rb:347:in `each_strongly_connected_component'
        from /usr/local/lib/ruby/3.1.0/tsort.rb:226:in `tsort_each'
        from /usr/local/lib/ruby/3.1.0/tsort.rb:205:in `tsort_each'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:60:in `run_initializers'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/application.rb:372:in `initialize!'
        from /var/www/discourse/config/environment.rb:7:in `<top (required)>'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/pry-0.14.2/lib/pry/pry_class.rb:103:in `require'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/pry-0.14.2/lib/pry/pry_class.rb:103:in `block in load_requires'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/pry-0.14.2/lib/pry/pry_class.rb:102:in `each'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/pry-0.14.2/lib/pry/pry_class.rb:102:in `load_requires'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/pry-0.14.2/lib/pry/pry_class.rb:143:in `final_session_setup'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/pry-0.14.2/lib/pry/cli.rb:82:in `parse_options'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/pry-0.14.2/bin/pry:12:in `<top (required)>'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/bin/pry:25:in `load'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/bin/pry:25:in `<top (required)>'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli/exec.rb:58:in `load'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli/exec.rb:58:in `kernel_load'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli/exec.rb:23:in `run'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli.rb:491:in `exec'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli.rb:34:in `dispatch'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli.rb:28:in `start'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/exe/bundle:45:in `block in <top (required)>'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
        from /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/exe/bundle:33:in `<top (required)>'
        from /usr/local/bin/bundle:25:in `load'
        from /usr/local/bin/bundle:25:in `<main>'

I feel like you are running an unsupported install, we only support Ruby 3.2 on latest Discourse code base.

We should certainly improve our messaging here, app should not be giving you cryptic errors.

I have manually updated it after having the forum down for about an hour, this page was so useful

https://meta.discourse.org/t/manually-update-discourse-and-docker-image-to-latest/23325

Thanks for raising this @Samir_Sabri - looks like we hadn’t yet updated the minimum required version in docker_manager (the UI which self-hosters use for upgrades). Once this is merged, people will be prompted to run a CLI rebuild before upgrading Discourse:

https://github.com/discourse/docker_manager/pull/176