bjfish
(Brandon Fish)
28 Aprile 2022, 5:06pm
1
Vorrei richiedere le seguenti 3 modifiche per supportare l’esecuzione di Discourse su TruffleRuby:
Modifica Richiesta
Aggiorna bin/rails per disabilitare unicorn quando fork non è supportato.
Errore
internal:core/kernel.rb:764:in `fork': fork is not available (NotImplementedError)
File
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'
Perché
TruffleRuby non supporta il forking.
Suggerimento
Disabilita unicorn se !Process.respond_to?(:fork)
========================================================
Modifica Richiesta
Disabilita mini_profiler per TruffleRuby
Errore
internal:core/kernel.rb:236:in `gem_original_require': cannot load such file -- stackprof (LoadError)
File
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
Perché
Stackprof non è attualmente supportato su TruffleRuby
Suggerimento
Disabilita il caricamento di mini_profiler quando RUBY_ENGINE è “TruffleRuby”
========================================================
Modifica Richiesta
Impedisci il caricamento di rbtrace
Utilizzi simili impediscono già il caricamento di 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
Errore
Failure/Error: require ‘rbtrace’
Suggerimento
Utilizza uno dei metodi nei link sopra per impedire il caricamento di rbtrace
File
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 Mi Piace
gerhard
(Gerhard Schlager)
29 Aprile 2022, 12:12pm
5
Sembrano richieste ragionevoli.
A proposito: è cambiato qualcosa riguardo al fatto che mini_racer non sia supportato su TruffleRuby? È un blocco importante.
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 Mi Piace
bjfish
(Brandon Fish)
29 Aprile 2022, 6:55pm
6
A proposito: è cambiato qualcosa riguardo al fatto che mini_racer non sia supportato su TruffleRuby? Questo è un blocco importante.
Ho un branch con la maggior parte delle funzionalità di mini_racer che supera la suite di test utilizzando GraalJS per TruffleRuby. Credo che gestisca tutte le funzionalità necessarie per Discourse. Deve solo essere revisionato e poi cercherò di farlo unire. Questo è come l’ho eseguito localmente: https://twitter.com/brandonfish/status/1486755128577253376
6 Mi Piace
bjfish
(Brandon Fish)
2 Maggio 2022, 3:44pm
7
Correzione:
Disabilita il caricamento di mini_profiler quando RUBY_ENGINE è “truffleruby”
2 Mi Piace
sam
(Sam Saffron)
3 Maggio 2022, 5:04am
8
mini_profiler dovrebbe andare ancora bene, ti consiglio di non caricare rbtrace / stackprof ecc. Ci sono dipendenze allentate.
mini_profiler può ancora fornire molto valore nel mondo truffle, nulla di specifico per MRI a riguardo.
4 Mi Piace
gerhard
(Gerhard Schlager)
4 Maggio 2022, 8:10pm
9
Ecco una PR con le modifiche richieste.
main ← truffleruby
opened 08:10PM - 04 May 22 UTC
Non sono ancora riuscito a farlo funzionare correttamente, c’è stato un java.lang.NullPointerException, ma potrebbe essere solo che ho disabilitato rudemente mini_racer. Non vedo l’ora di vedere un Discourse completamente funzionante in esecuzione su TruffleRuby.
Non ho approfondito ulteriormente, ma ho notato un errore quando ho semplicemente disabilitato il caricamento di stackprof e memory_profiler. Quindi per ora ho disabilitato completamente 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'>
Potrebbe essere stato un effetto collaterale di altri problemi. Immagino che potremmo indagare quando gli altri problemi saranno risolti.
6 Mi Piace