bjfish
(Brandon Fish)
2020 年 7 月 28 日午後 2:41
1
fast_xor プラットフォームは :mri としてリストされています。しかし、この gem は C 拡張を必要とするようですが、MRI に限定されたものではありません: discourse/Gemfile at 0c7eaa57b26a22b0d0f85957ce0720be748d1fe6 · discourse/discourse · GitHub
また、最新の TruffleRuby においても動作することを確認しました。
プラットフォームを :ruby に更新していただけますでしょうか。
参考までに、異なるプラットフォームの名称の意味の一覧を以下に示します:
「いいね!」 5
sam
(Sam Saffron)
2020 年 7 月 29 日午前 7:10
2
もちろん、これは私が処理しました。他にもいくつか残っていますが、それらについてどうすればよいか迷っています。どうすればよいでしょうか?(byebug, ruby-prof, better_errors, rbtrace, gc_tracer, stackprof, memory_profiler)
とはいえ、ミニラサーが動作するようになるまで、トラフルは完全にブロックされています。詳細は以下を参照してください:
opened 02:42AM - 26 Nov 19 UTC
closed 03:24PM - 16 Aug 22 UTC
cexts
```
truffleruby 19.3.0, like ruby 2.6.2, GraalVM CE Native [x86_64-darwin]
```…
To reproduce:
```
gem install mini_racer
ruby -rmini_racer -e 'context = MiniRacer::Context.new; context.eval "var adder = (a,b)=>a+b"; puts context.eval "adder(20,22)"'
```
Error:
```
~/.gem/truffleruby/2.6.2/gems/mini_racer-0.2.8/ext/mini_racer_extension/mini_racer_extension.cc:752:in `rb_context_init_unsafe': External function _ZN2v82V813InitializeICUEPKc cannot be found. (LLVMLinkerException) (RuntimeError)
Translated to internal error
from ~/.rubies/truffleruby-19.3.0/lib/truffle/truffle/cext_ruby.rb:37:in `init_unsafe'
from ~/.gem/truffleruby/2.6.2/gems/mini_racer-0.2.8/lib/mini_racer.rb:156:in `initialize'
from -e:1:in `new'
from -e:1:in `<main>'
```
サーバー側で Markdown を HTML に変換できない場合、Discourse はまともに機能しません。
「いいね!」 5
eregon
(Benoit Daloze)
2020 年 7 月 29 日午後 4:03
3
ありがとうございます、DEV: change platform mri to platform ruby on some gems · discourse/discourse@620c223 · GitHub は問題なさそうです。
unicorn は fork に依存しているため TruffleRuby 上では動作しない可能性が高いですが、実際にはインストールはされます。
Discourse は代わりに Puma で実行できますか?そのために必要な設定はありますか?
他にもいくつか残っているものがあり、それらについてはどうすればよいか迷っています(byebug、ruby-prof、better_errors、rbtrace、gc_tracer、stackprof、memory_profiler)
はい、それらはすべて現時点では MRI 固有のもののようです(異なるバックエンドをサポートし始めるまでは)。そのため、当面は platforms: :mri とするのがベストでしょう。
better_errors は動作するかもしれませんが、binding_of_caller はまだ TruffleRuby をサポートしていません。
これらの gem は主にデバッグやパフォーマンス解析のツールのようで、アプリを動作させるために必須とは考えられません。
はい、mini_racer についても検討する必要があります。
参考までに、なぜ Markdown のレンダリングに JavaScript が使われているのでしょうか?
クライアントブラウザで実行された場合と完全に同じ結果を得るためでしょうか?
「いいね!」 2
Falco
(Falco)
2020 年 7 月 29 日午後 4:47
4
開発環境では、単純な rails server コマンドで Puma が使用されます。
はい。現在、wasm が存在するため、それが解決策となる可能性がありますが、現在のようにプラグインによる拡張性を維持したまま変更するには、非常に大規模な変更が必要となります。
「いいね!」 4
sam
(Sam Saffron)
2020 年 7 月 30 日午前 12:39
5
wasm はこの場合、明らかに現実的な選択肢ではありません。ペイロードが大幅に大きくなり、CSP(コンテンツセキュリティポリシー)や CORS の懸念を考慮して正しく実行させることに関するセキュリティ上の問題も多数あります。一方、markdown.it の実装は驚くほど高速で拡張性が高く、多数のプラグインと大規模な既存のエコシステムに対応しています。
mini_racer に関する追加のコンテキストを共有します。Discourse では最初から、マークダウンを処理する単一のパイプラインを堅持してきました。これにより、サーバーとクライアントがわずかに異なる方言を話していたために発生する非常に厄介なバグのクラスを完全に排除できました(これは私が Stack Overflow で経験した問題です)。Discourse においては、プラグインがパイプラインを変更できるため、このアプローチはさらに重要です。例えば:
はプラグイン([] の解析)で実装されています
Unicorn を使用し、フォーク機能に依存することで得られる「生活の質(QoL)」を向上させる機能はいくつかあります。詳細は以下をご覧ください:
# frozen_string_literal: true
# See http://unicorn.bogomips.org/Unicorn/Configurator.html
if (ENV["LOGSTASH_UNICORN_URI"] || "").length > 0
require_relative '../lib/discourse_logstash_logger'
require_relative '../lib/unicorn_logstash_patch'
logger DiscourseLogstashLogger.logger(uri: ENV['LOGSTASH_UNICORN_URI'], type: :unicorn)
end
discourse_path = File.expand_path(File.expand_path(File.dirname(__FILE__)) + "/../")
# tune down if not enough ram
worker_processes (ENV["UNICORN_WORKERS"] || 3).to_i
working_directory discourse_path
# listen "#{discourse_path}/tmp/sockets/unicorn.sock"
listen ENV["UNICORN_LISTENER"] || "#{(ENV["UNICORN_BIND_ALL"] ? "" : "127.0.0.1:")}#{(ENV["UNICORN_PORT"] || 3000).to_i}"
This file has been truncated. show original
具体的には、マスタープロセスから Sidekiq の子プロセスを監視・管理しています。
ただし、Truffle には GIL(グローバルインタプリタロック)がありません。mini_racer が動作するようになれば Puma はすでに Gemfile に含まれるため、Sidekiq と Puma を同じプロセス内に維持し、メモリを節約する Truffle 設定について協力することも可能です。あるいは、ユーザーが手動で Sidekiq プロセスを起動することもできます。Puma はもちろん動作します。Rack.hijack を大規模に利用していますが、これは Puma、Unicorn、Passenger のいずれでも既に実装されています。
「いいね!」 5
volanar
(Volanar)
2022 年 8 月 21 日午後 7:51
6
mini_racer 0.6.3 が TruffleRuby で動作するようになりました
「いいね!」 3