bjfish
(Brandon Fish)
Abril 28, 2022, 5:06pm
1
Gostaria de solicitar as seguintes 3 alterações para ajudar a executar o Discourse no TruffleRuby:
Alteração Solicitada
Atualizar bin/rails para desativar o unicorn quando o fork não for suportado.
Erro
internal:core/kernel.rb:764:in `fork': fork is not available (NotImplementedError)
Arquivos
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'
Por quê
O TruffleRuby não suporta fork.
Sugestão
Desativar o unicorn se !Process.respond_to?(:fork)
========================================================
Alteração Solicitada
Desativar mini_profiler para TruffleRuby
Erro
internal:core/kernel.rb:236:in `gem_original_require': cannot load such file -- stackprof (LoadError)
Arquivos
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
Por quê
O Stackprof não é suportado atualmente no TruffleRuby
Sugestão
Desativar o carregamento do mini_profiler quando RUBY_ENGINE for “TruffleRuby”
========================================================
Alteração Solicitada
Impedir o carregamento do rbtrace
Usos semelhantes já impedem o carregamento do 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
Erro
Failure/Error: require ‘rbtrace’
Sugestão
Use um dos métodos nos links acima para impedir o carregamento do rbtrace
Arquivos
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 curtidas
gerhard
(Gerhard Schlager)
Abril 29, 2022, 12:12pm
5
Essas parecem ser solicitações razoáveis.
A propósito: algo mudou sobre o mini_racer não ser suportado no TruffleRuby? Esse é um bloqueador 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 curtidas
bjfish
(Brandon Fish)
Abril 29, 2022, 6:55pm
6
Aliás: Algo mudou sobre o mini_racer não ser suportado no TruffleRuby? Esse é um bloqueador importante.
Tenho um branch com a maior parte da funcionalidade do mini_racer passando na suíte de testes usando GraalJS para TruffleRuby. Acredito que ele lida com toda a funcionalidade necessária para o Discourse. Só precisa ser revisado e então tentarei fazer com que seja mesclado. É assim que tenho executado localmente: https://twitter.com/brandonfish/status/1486755128577253376
6 curtidas
bjfish
(Brandon Fish)
Maio 2, 2022, 3:44pm
7
Correção:
Desabilitar o carregamento do mini_profiler quando RUBY_ENGINE for “truffleruby”
2 curtidas
sam
(Sam Saffron)
Maio 3, 2022, 5:04am
8
mini_profiler ainda deve funcionar bem, eu recomendaria apenas não carregar rbtrace / stackprof etc. Existem dependências soltas.
mini_profiler ainda pode fornecer muito valor no mundo truffle, nada específico do MRI sobre isso.
4 curtidas
gerhard
(Gerhard Schlager)
Maio 4, 2022, 8:10pm
9
Aqui está um PR com as alterações solicitadas.
main ← truffleruby
opened 08:10PM - 04 May 22 UTC
Ainda não consegui fazê-lo rodar com sucesso, houve um java.lang.NullPointerException, mas isso pode ser apenas eu desabilitando rudemente o mini_racer. Estou realmente ansioso para ver um Discourse totalmente funcional rodando no TruffleRuby.
Não investiguei mais a fundo, mas notei um erro quando apenas desabilitei o carregamento de stackprof e memory_profiler. Então, desabilitei completamente o mini_profiler por enquanto.
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'>
Pode ter sido um efeito colateral de outros problemas. Acho que poderíamos investigar quando outros problemas forem resolvidos.
6 curtidas