bjfish
(Brandon Fish)
Avril 28, 2022, 5:06
1
Je voudrais demander les 3 changements suivants pour aider à exécuter Discourse sur TruffleRuby :
Changement demandé
Mettre à jour bin/rails pour désactiver unicorn lorsque fork n’est pas pris en charge.
Erreur
internal:core/kernel.rb:764:in `fork': fork is not available (NotImplementedError)
Fichiers
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'
Pourquoi
TruffleRuby ne prend pas en charge le fork.
Suggestion
Désactiver unicorn si !Process.respond_to?(:fork)
========================================================
Changement demandé
Désactiver mini_profiler pour TruffleRuby
Erreur
internal:core/kernel.rb:236:in `gem_original_require': cannot load such file -- stackprof (LoadError)
Fichiers
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
Pourquoi
Stackprof n’est actuellement pas pris en charge sur TruffleRuby
Suggestion
Désactiver le chargement de mini_profiler lorsque RUBY_ENGINE est “TruffleRuby”
========================================================
Changement demandé
Empêcher le chargement de rbtrace
Des utilisations similaires empêchent déjà le chargement de 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
Erreur
Failure/Error: require ‘rbtrace’
Suggestion
Utiliser l’une des méthodes des liens ci-dessus pour empêcher le chargement de rbtrace
Fichiers
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 « J'aime »
gerhard
(Gerhard Schlager)
Avril 29, 2022, 12:12
5
Ces demandes semblent raisonnables.
Au fait : y a-t-il eu des changements concernant la non-prise en charge de mini_racer sur TruffleRuby ? C’est un obstacle majeur.
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 « J'aime »
bjfish
(Brandon Fish)
Avril 29, 2022, 6:55
6
AU fait : y a-t-il eu des changements concernant la non-prise en charge de mini_racer sur TruffleRuby ? C’est un obstacle majeur.
J’ai une branche avec la plupart des fonctionnalités de mini_racer qui réussissent la suite de tests en utilisant GraalJS pour TruffleRuby. Je pense qu’elle gère toutes les fonctionnalités nécessaires pour Discourse. Il faut juste qu’elle soit revue et je vais ensuite essayer de la faire fusionner. Voici comment je l’ai exécutée localement : https://twitter.com/brandonfish/status/1486755128577253376
6 « J'aime »
bjfish
(Brandon Fish)
Mai 2, 2022, 3:44
7
Correction :
Désactiver le chargement de mini_profiler lorsque RUBY_ENGINE est « truffleruby »
2 « J'aime »
sam
(Sam Saffron)
Mai 3, 2022, 5:04
8
mini_profiler devrait toujours fonctionner, je recommanderais simplement de ne pas charger rbtrace / stackprof etc. Il existe des dépendances lâches.
mini_profiler peut toujours apporter beaucoup de valeur dans le monde de truffle, rien de spécifique à MRI à ce sujet.
4 « J'aime »
gerhard
(Gerhard Schlager)
Mai 4, 2022, 8:10
9
Voici une PR avec les modifications demandées.
main ← truffleruby
opened 08:10PM - 04 May 22 UTC
Je n’ai toujours pas réussi à le faire fonctionner correctement, il y avait une java.lang.NullPointerException, mais c’est peut-être juste moi qui ai désactivé grossièrement mini_racer. J’ai vraiment hâte de voir un Discourse entièrement fonctionnel fonctionnant sur TruffleRuby.
Je n’ai pas approfondi cela, mais j’ai remarqué une erreur lorsque j’ai seulement désactivé le chargement de stackprof et memory_profiler. J’ai donc complètement désactivé mini_profiler pour l’instant.
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'>
Cela pourrait avoir été un effet secondaire d’autres problèmes. Je suppose que nous pourrions enquêter une fois les autres problèmes résolus.
6 « J'aime »