对支持 TruffleRuby 讨论的更改请求

我希望对以下 3 项更改提出请求,以帮助支持在 TruffleRuby 上运行 Discourse:

请求的更改
更新 bin/rails 以在不支持 fork 时禁用 unicorn。

错误

<internal:core>:764:in `fork': fork is not available (NotImplementedError)

文件
bin/rails

原因
TruffleRuby 不支持 fork。

建议
如果 !Process.respond_to?(:fork),则禁用 unicorn

========================================================

请求的更改
为 TruffleRuby 禁用 mini_profiler

错误

<internal:core>:236:in `gem_original_require': cannot load such file -- stackprof (LoadError)

文件
config/initializers/006-mini_profiler.rb

原因
Stackprof 目前在 TruffleRuby 上不受支持

建议
当 RUBY_ENGINE 为“TruffleRuby”时,禁用 mini_profiler 加载

========================================================

请求的更改
阻止加载 rbtrace

阻止 rb_trace 加载的类似用法:

错误
Failure/Error: require ‘rbtrace’

建议
使用上面链接中的一种方法来阻止加载 rbtrace

文件
spec/rails_helper.rb

2 个赞

这些似乎是合理的请求。

顺便问一下:mini_racer 在 TruffleRuby 上不受支持的情况有变化吗?这是一个主要的障碍。

4 个赞

顺便问一下:mini_racer 不支持 TruffleRuby 的情况有变化吗?这是一个主要的障碍。

我有一个分支,使用 GraalJS for TruffleRuby,大部分 mini_racer 功能都通过了测试套件。我相信它处理了 Discourse 所需的所有功能。它只需要被审查,然后我就会尝试将其合并。我一直在本地这样运行它:https://twitter.com/brandonfish/status/1486755128577253376

6 个赞

修正:
当 RUBY_ENGINE 为 “truffleruby” 时,禁用 mini_profiler 加载

2 个赞

mini_profiler 应该仍然可以正常工作,我建议我们不要加载 rbtrace / stackprof 等。它们有松散的依赖关系。

mini_profiler 在 truffle 环境中仍然可以提供很多价值,这与 MRI 无关。

4 个赞

这是包含请求更改的 PR。

我仍然无法成功运行它,出现了一个 java.lang.NullPointerException,但这可能只是我粗暴地禁用了 mini_racer。我非常期待看到一个在 TruffleRuby 上完全运行的 Discourse。

我没有进一步研究这个问题,但当我只禁用 stackprof 和 memory_profiler 的加载时,我注意到一个错误。所以我现在完全禁用了 mini_profiler。

2022-05-04 21:48:13 +0200 Rack app ("POST /mini-profiler-resources/results" - (127.0.0.1)): #<SystemStackError: stack level too deep
        from StackOverflowCheckImpl.java:328:in `com.oracle.svm.core.graal.snippets.StackOverflowCheckImpl.newStackOverflowError0'>

这可能是其他问题的副作用。我想在解决其他问题后可以进行调查。

6 个赞