Inoffizieller Discourse GraphQL API-Plugin

discourse-graphql - GitHub - tgxworld/discourse-graphql · GitHub

Hallo zusammen, ich möchte gerne das Plugin discourse-graphql vorstellen, das ich kürzlich als persönliches Projekt entwickelt habe. Das Plugin befindet sich noch in der Entwicklung, da derzeit nur drei Abfragefelder verfügbar sind. Da ich die Discourse-API für Integrationen nicht selbst nutze, würde ich gerne von potenziellen Nutzern erfahren, welche Abfragen oder Mutationen ihr gerne im Plugin sehen möchtet. Gebt mir einfach in diesem Thema eure Anwendungsfälle und die gewünschten Felder an, damit ich sie ins Plugin aufnehmen kann.

20 „Gefällt mir“

Hallo @tgxworld, sehr interessante Sachen.
Da du bereits in diese Richtung arbeitest – was hältst du von

GitHub - dosco/graphjin: GraphJin - An Automagical Compiler to Connect AI to Your Databases · GitHub

https://www.youtube.com/watch?v=TGq9wJAj78I

Oder ist es eine verrückte Idee, es mit Discourse zu verwenden?
Soweit ich weiß, funktioniert es gut mit Rails, einschließlich der Unterstützung für Rails-Authentifizierung (Redis, Memcache, Cookie). Es kann in bestehende Rails-Anwendungen integriert werden, aber ich bin mir nicht sicher, ob es realistisch ist, es innerhalb eines Plugins zu verwenden.

Was denkst du?

Hallo @4ong :wave:

Super Graph sieht interessant aus, aber ich bin mir nicht sicher, ob es hier unseren Anforderungen gerecht wird. Das Hauptproblem, das ich sehe, ist, dass die SQL-Abfragen, die wir generieren müssen, nicht einfach sind und viele bedingte Pfade beinhalten können. Diese Bedingungen lassen sich wahrscheinlich nicht einfach mit einer einzigen GraphQL-Abfrage ausdrücken.

3 „Gefällt mir“

Lieber Alex,

danke, dass du dieses Plugin geteilt hast. Ich habe viel gelernt, indem ich deinen Plugin-Code gelesen und gesehen habe, wie du dies angegangen bist.

Lesezeichen gesetzt!

Nochmals vielen Dank.

Danke, ich denke, dieses Plugin wird mir bei einigen benutzerdefinierten GraphQL-Endpunkten in meiner Discourse-Instanz sehr helfen.

Allerdings antwortet Discourse nach dem Neuaufbau mit 502 Bad Gateway.

Hier sind die Logs.

Logs
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/loader/callbacks.rb:18:in `on_file_autoloaded': expected file /var/www/discourse/plugins/discourse-graphql/app/graphql/loaders/record_loader.rb to define constant Loaders::RecordLoader, but didn't (Zeitwerk::NameError)
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/kernel.rb:27:in `block in require'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/kernel.rb:26:in `tap'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/kernel.rb:26:in `require'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:53:in `require_relative'
	from /var/www/discourse/plugins/discourse-graphql/app/graphql/discourse_schema.rb:3:in `<main>'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/kernel.rb:26:in `require'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/loader.rb:409:in `const_get'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/loader.rb:409:in `block (2 levels) in eager_load'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/loader.rb:733:in `block in ls'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/loader.rb:725:in `foreach'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/loader.rb:725:in `ls'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/loader.rb:404:in `block in eager_load'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/loader.rb:393:in `synchronize'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/loader.rb:393:in `eager_load'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/loader.rb:508:in `each'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/loader.rb:508:in `eager_load_all'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.3/lib/rails/application/finisher.rb:122:in `block in <module:Finisher>'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.3/lib/rails/initializable.rb:32:in `instance_exec'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.3/lib/rails/initializable.rb:32:in `run'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.3/lib/rails/initializable.rb:61:in `block in run_initializers'
	from /usr/local/lib/ruby/2.7.0/tsort.rb:228:in `block in tsort_each'
	from /usr/local/lib/ruby/2.7.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
	from /usr/local/lib/ruby/2.7.0/tsort.rb:431:in `each_strongly_connected_component_from'
	from /usr/local/lib/ruby/2.7.0/tsort.rb:349:in `block in each_strongly_connected_component'
	from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `each'
	from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `call'
	from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `each_strongly_connected_component'
	from /usr/local/lib/ruby/2.7.0/tsort.rb:226:in `tsort_each'
	from /usr/local/lib/ruby/2.7.0/tsort.rb:205:in `tsort_each'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.3/lib/rails/initializable.rb:60:in `run_initializers'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.3/lib/rails/application.rb:363:in `initialize!'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.3/lib/rails/railtie.rb:190:in `public_send'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.3/lib/rails/railtie.rb:190:in `method_missing'
	from /var/www/discourse/config/environment.rb:7:in `<top (required)>'
	from config.ru:7:in `require'
	from config.ru:7:in `block in <main>'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/builder.rb:125:in `instance_eval'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/builder.rb:125:in `initialize'
	from config.ru:1:in `new'
	from config.ru:1:in `<main>'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/unicorn-5.7.0/lib/unicorn.rb:54:in `eval'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/unicorn-5.7.0/lib/unicorn.rb:54:in `block in builder'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/unicorn-5.7.0/lib/unicorn/http_server.rb:822:in `build_app!'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/unicorn-5.7.0/lib/unicorn/http_server.rb:141:in `start'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/unicorn-5.7.0/bin/unicorn:128:in `<top (required)>'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `load'
	from /var/www/discourse/vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `<main>'

Ich verstehe nicht, was das bedeutet. Es gibt eine SO-Antwort mit einer ähnlichen Fehlermeldung, aber ich bin mir nicht sicher, ob sie hier passt.

Hast du eine Idee?

EDIT: Ich habe einen PR gesendet, der dieses Problem behebt.

Danke.

Entschuldigung, ich werde diesen Beitrag schließen. Ich hatte keine Zeit, das Plugin in einen guten Zustand zu bringen, und wir haben bei Discourse auch keinen echten Bedarf dafür.

3 „Gefällt mir“