TruffleRubyでのディスコースサポートへの変更要求

TruffleRuby で Discourse を実行するための、以下の 3 つの変更をリクエストします。

リクエストされた変更
fork がサポートされていない場合に unicorn を無効にするように bin/rails を更新します。

エラー

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

ファイル
bin/rails

理由
TruffleRuby はフォークをサポートしていません。

提案
!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

BTW: mini_racer が TruffleRuby でサポートされなくなったことについて、何か変更はありましたか? それは大きなブロッカーです。

GraalJS を使用して 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 が発生しましたが、これは私が crudely 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