Bonjour à tous, je souhaiterais vous présenter le plugin discourse-graphql sur lequel je travaille récemment dans le cadre d’un projet personnel. Le plugin est encore en cours de développement, car seuls trois champs de requête sont actuellement exposés. Comme je n’utilise pas personnellement l’API Discourse pour des intégrations, j’aimerais savoir quelles requêtes ou mutations vous aimeriez voir ajoutées au plugin. Veuillez simplement me fournir votre cas d’usage et les champs que vous recherchez dans ce sujet afin que je puisse les intégrer au plugin.
Puisque vous travaillez déjà dans cette direction, qu’en pensez-vous ?
Ou est-ce une idée folle de l’utiliser avec Discourse ?
À ma connaissance, cela fonctionne bien avec Rails, y compris avec l’authentification Rails prise en charge (Redis, Memcache, Cookie). Et il peut être intégré dans des applications Rails existantes, mais je ne suis pas sûr que ce soit réaliste de l’utiliser dans un plugin.
Super Graph semble intéressant, mais je ne suis pas sûr que cela réponde à nos besoins ici. Le principal problème que je vois, c’est que les requêtes SQL que nous devons générer ne sont pas simples et peuvent impliquer de nombreux chemins conditionnels. Ces conditions sont probablement difficiles à exprimer avec une simple requête GraphQL.
Merci, je pense que ce plugin sera d’une grande aide pour certains points de terminaison GraphQL personnalisés dont j’ai besoin dans mon instance Discourse.
Cependant, Discourse répond par une erreur 502 Bad Gateway après la reconstruction.
Voici les journaux.
Journaux
/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>'
Je ne sais pas ce que cela signifie. Il y a une réponse sur Stack Overflow avec un message d’erreur similaire, mais je ne suis pas certain qu’elle s’applique ici.
Désolé, je vais clôturer ce sujet. Je n’ai pas eu le temps de mettre le plugin dans un état satisfaisant et nous n’avons pas vraiment de besoin réel pour cela sur Discourse.