zombocom/rack-timeout

RACK_TIMEOUT_TERM_ON_TIMEOUT=0 still does not allow TruffleRuby to run

sempervictus opened this issue · 2 comments

Getting

Current Runtime does not support processes
/build/openprojectv/src/openproject/vendor/bundle/truffleruby/3.2.2.23.1.0/gems/rack-timeout-0.6.3/lib/rack/timeout/core.rb:78:in `initialize'

when invoking RACK_TIMEOUT_TERM_ON_TIMEOUT=0 RAILS_ENV=production bundle exec rake db:migrate db:schema:dump db:schema:cache:dump with TruffleRuby (JVM version) 23.1.1.
Trying to hack around it currently with sed -e 's/@term_on_timeout =.*/@term_on_timeout = ::RUBY_ENGINE == "truffleruby" ? false : read_timeout_property(term_on_timeout, ENV.fetch("RACK_TIMEOUT_TERM_ON_TIMEOUT", 0).to_i)/' lib/rack/timeout/core.rb but it seems like either the ENV var is being overridden or term_on_timeout is already true somehow.

Can you please share your use (or insert_before) statement?

The environment variables will not override setting a value at initialization time. If you want to be able to toggle a setting on/off using environment variables, you must always use environment variables. The alternative is to handle it yourself to have the effect you desire.

use Rack::Timeout, term_timeout: ENV['RACK_TIMEOUT_TERM_ON_TIMEOUT'] || 15

In this case, it will prefer to use the ENV var since it's being explicitly passed in, but default to 15 if it is unset.

Otherwise, this appears to be a bug in TruffleRuby. (Arguably, it already is, since the error you provided is not being printed by rack-timeout, and rack-timeout only attempts to run ::Process.respond_to?(:fork), which should be able to return false in TruffleRuby rather than raising an error. If there is some more canonical way to check this, I'm all ears.)

Ah, sorry, this error was raised by rack-timeout; the error message was changed on HEAD in this commit 0f35a85 which misled me here.