bjfish
(Brandon Fish)
28 أبريل 2022، 5:06م
1
أود أن أطلب التغييرات الثلاثة التالية للمساعدة في تشغيل Discourse على TruffleRuby:
التغيير المطلوب
تحديث bin/rails لتعطيل unicorn عندما لا يتم دعم fork.
خطأ
internal:core/kernel.rb:764:in `fork': fork is not available (NotImplementedError)
الملفات
bin/rails
#!/usr/bin/env ruby
# frozen_string_literal: true
if !ENV["RAILS_ENV"] && (ARGV[0] == "s" || ARGV[0] == "server")
ENV["UNICORN_PORT"] ||= "3000"
if ARGV[1] == "-p" && (port = ARGV[2].to_i) > 0
ENV["UNICORN_PORT"] = port.to_s
end
ENV["RAILS_LOGS_STDOUT"] ||= "1"
exec File.expand_path("unicorn", __dir__)
end
APP_PATH = File.expand_path('../config/application', __dir__)
require_relative '../config/boot'
require 'rails/commands'
لماذا
TruffleRuby لا يدعم fork.
اقتراح
تعطيل unicorn إذا كان !Process.respond_to?(:fork)
========================================================
التغيير المطلوب
تعطيل mini_profiler لـ TruffleRuby
خطأ
internal:core/kernel.rb:236:in `gem_original_require': cannot load such file -- stackprof (LoadError)
الملفات
config/initializers/006-mini_profiler.rb
# frozen_string_literal: true
# If Mini Profiler is included via gem
if Rails.configuration.respond_to?(:load_mini_profiler) && Rails.configuration.load_mini_profiler
require 'rack-mini-profiler'
require 'stackprof'
begin
require 'memory_profiler'
rescue => e
STDERR.put "#{e} failed to require mini profiler"
end
# initialization is skipped so trigger it
Rack::MiniProfilerRails.initialize!(Rails.application)
end
if defined?(Rack::MiniProfiler) && defined?(Rack::MiniProfiler::Config)
# note, we may want to add some extra security here that disables mini profiler in a multi hosted env unless user global admin
# raw_connection means results are not namespaced
This file has been truncated. show original
لماذا
Stackprof غير مدعوم حاليًا على TruffleRuby
اقتراح
تعطيل تحميل mini_profiler عندما يكون RUBY_ENGINE “TruffleRuby”
========================================================
التغيير المطلوب
منع تحميل rbtrace
تستخدم استخدامات مشابهة بالفعل لمنع تحميل rb_trace:
config.hosts.concat(hosts.split(","))
end
require 'middleware/turbo_dev'
config.middleware.insert 0, Middleware::TurboDev
require 'middleware/missing_avatars'
config.middleware.insert 1, Middleware::MissingAvatars
config.enable_anon_caching = false
if RUBY_ENGINE == "ruby"
require 'rbtrace'
end
if emails = GlobalSetting.developer_emails
config.developer_emails = emails.split(",").map(&:downcase).map(&:strip)
end
if ENV["DISCOURSE_SKIP_CSS_WATCHER"] != "1" && (defined?(Rails::Server) || defined?(Puma) || defined?(Unicorn))
require 'stylesheet/watcher'
STDERR.puts "Starting CSS change watcher"
@watcher = Stylesheet::Watcher.watch
خطأ
Failure/Error: require ‘rbtrace’
اقتراح
استخدم إحدى الطرق الموضحة في الروابط أعلاه لمنع تحميل rbtrace
الملفات
spec/rails_helper.rb
SimpleCov.start 'rails' do
add_group 'Libraries', /^\/lib\/(?!tasks).*$/
add_group 'Scripts', 'script'
add_group 'Serializers', 'app/serializers'
add_group 'Services', 'app/services'
add_group 'Tasks', 'lib/tasks'
end
end
require 'rubygems'
require 'rbtrace'
require 'pry'
require 'pry-byebug'
require 'pry-rails'
require 'fabrication'
require 'mocha/api'
require 'certified'
require 'webmock/rspec'
class RspecErrorTracker
def self.last_exception=(ex)
إعجابَين (2)
gerhard
(Gerhard Schlager)
29 أبريل 2022، 12:12م
5
تبدو هذه طلبات معقولة.
بالمناسبة: هل تغير أي شيء بشأن عدم دعم mini_racer على TruffleRuby؟ هذا عائق كبير.
Sure I just too care of this there are a few others I left which I am unsure about, what should I do with them? (byebug, ruby-prof, better_errors, rbtrace, gc_tracer, stackprof, memory_profiler)
That said we are totally blocked on truffle till we get mini_racer working per:
https://github.com/oracle/truffleruby/issues/1827
Discourse is not really properly functional if you can not cook Markdown to HTML on the server.
4 إعجابات
bjfish
(Brandon Fish)
29 أبريل 2022، 6:55م
6
بالمناسبة: هل تغير أي شيء بخصوص عدم دعم mini_racer على TruffleRuby؟ هذا يمثل عائقًا كبيرًا.
لدي فرع به معظم وظائف mini_racer تجتاز مجموعة الاختبارات باستخدام GraalJS لـ TruffleRuby. أعتقد أنه يتعامل مع جميع الوظائف اللازمة لـ Discourse. إنها تحتاج فقط إلى مراجعة وسأحاول بعد ذلك دمجها. هذه هي الطريقة التي كنت أعمل بها محليًا: https://twitter.com/brandonfish/status/1486755128577253376
6 إعجابات
bjfish
(Brandon Fish)
2 مايو 2022، 3:44م
7
تصحيح:
تعطيل تحميل mini_profiler عندما يكون RUBY_ENGINE هو “truffleruby”
إعجابَين (2)
sam
(Sam Saffron)
3 مايو 2022، 5:04ص
8
لا يزال mini_profiler جيدًا، وأوصي فقط بعدم تحميل rbtrace / stackprof وما إلى ذلك. هناك تبعيات مفكوكة.
يمكن لـ mini_profiler أن يوفر الكثير من القيمة في عالم truffle، ولا يوجد شيء خاص بـ MRI حول هذا.
4 إعجابات
gerhard
(Gerhard Schlager)
4 مايو 2022، 8:10م
9
إليك طلب سحب مع التغييرات المطلوبة.
main ← truffleruby
opened 08:10PM - 04 May 22 UTC
لم أتمكن بعد من تشغيله بنجاح، كان هناك 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'>
قد يكون هذا تأثيرًا جانبيًا لمشاكل أخرى. أعتقد أنه يمكننا التحقيق عندما يتم حل المشاكل الأخرى.
6 إعجابات