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.)