通过模板启用 YJIT 无效

你好,

我运行的是自托管的 Discourse 安装版(2026.5.0-latest)。今天我尝试启用 YJIT。我在 containers/app.yml 中添加了 "templates/enable-ruby-yjit.yml" 并重新构建了应用。

重新构建完成后,发生了一些有趣的事情。在 Docker 容器内,我运行了 env | grep RUBY_YJIT_ENABLE,得到了 RUBY_YJIT_ENABLE=1。到目前为止一切正常。但随后我运行了 sudo -u discourse RAILS_ENV=production bundle exec rails runner 'puts "YJIT enabled: #{RubyVM::YJIT.enabled?}"; puts RUBY_DESCRIPTION',结果却是:

YJIT enabled: false

ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +PRISM [x86_64-linux] 

尽管添加了 enable-ruby-yjit.yml 模板,YJIT 仍未启用。接着,当我运行 sudo -u discourse RAILS_ENV=production bundle exec rails runner 'puts "GlobalSetting.yjit_enabled=#{GlobalSetting.yjit_enabled}"' 时,得到的是 GlobalSetting.yjit_enabled= —— 一个空值!

总之,在进一步折腾后,我最终通过在 containers/app.yml 中添加以下内容成功启用了 YJIT:

env:
  DISCOURSE_YJIT_ENABLED: true

我确信某处存在一个 bug(GlobalSetting.yjit_enabled 绝不应该返回 nil),但设置环境变量确实生效了。希望有人通过 Google 搜索到这个问题时能发现这个主题。

1 个赞