Внесены изменения для поддержки Discourse в TruffleRuby

Я хотел бы запросить следующие 3 изменения для поддержки работы Discourse на TruffleRuby:

Запрошенное изменение
Обновить bin/rails, чтобы отключать unicorn, когда fork не поддерживается.

Ошибка

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

Файлы
bin/rails

Причина
TruffleRuby не поддерживает fork.

Предложение
Отключать unicorn, если !Process.respond_to?(:fork)

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

Запрошенное изменение
Отключить mini_profiler для TruffleRuby

Ошибка

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

Файлы
config/initializers/006-mini_profiler.rb

Причина
Stackprof в настоящее время не поддерживается в TruffleRuby.

Предложение
Отключать загрузку mini_profiler, когда RUBY_ENGINE равен “TruffleRuby”.

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

Запрошенное изменение
Предотвратить загрузку rbtrace

Аналогичные случаи, где уже предотвращается загрузка rb_trace:

Ошибка
Failure/Error: require ‘rbtrace’

Предложение
Использовать один из методов, указанных в ссылках выше, чтобы предотвратить загрузку rbtrace.

Файлы
spec/rails_helper.rb

Кажется, это разумные запросы.

Кстати: изменилось ли что-то в том, что mini_racer не поддерживается в TruffleRuby? Это серьёзное препятствие.

Кстати: изменилось ли что-то в том, что mini_racer не поддерживается в TruffleRuby? Это серьёзное препятствие.

У меня есть ветка, в которой большая часть функциональности mini_racer проходит набор тестов в TruffleRuby с использованием GraalJS. Я полагаю, что она покрывает все необходимые для Discourse функции. Её нужно только проверить, после чего я постараюсь добиться её включения в основную ветку. Вот как я запускаю это локально: https://twitter.com/brandonfish/status/1486755128577253376

Исправление:
Отключить загрузку mini_profiler, когда RUBY_ENGINE равен «truffleruby»

mini_profiler всё ещё должен работать нормально, я бы рекомендовал просто не загружать rbtrace / stackprof и т. д. Там есть нестрого связанные зависимости.

mini_profiler может по-прежнему приносить много пользы в мире Truffle, в этом нет ничего специфичного для MRI.

Вот PR с запрошенными изменениями.

Мне всё ещё не удалось запустить это успешно, возникла ошибка java.lang.NullPointerException, но это может быть связано с моим грубым отключением mini_racer. Я очень жду момента, когда полностью функциональный Discourse будет работать на TruffleRuby.

Я не углублялся в это, но заметил ошибку, когда отключил только загрузку 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'>

Это могло быть побочным эффектом других проблем. Думаю, мы сможем заняться этим, когда будут решены остальные проблемы.