Riferimento: Run Data Explorer queries with the Discourse API
Quando si passano parametri a una query SQL tramite API, Discourse attualmente richiede che tutti i valori siano racchiusi tra virgolette doppie, inclusi gli interi, che non sono racchiusi per impostazione predefinita su alcuni sistemi (in particolare json_encode di PHP). Guardando il JSON RFC, non c’è alcun requisito per usare virgolette doppie per gli interi. Questo requisito va anche contro la filosofia di “essere tolleranti in ciò che si accetta…”
Come riprodurre?
-F 'params={\"user_id\":2}'
Il server restituisce 500 Internal Server Error.
Nei log degli errori questo viene visualizzato:
NoMethodError (undefined method `downcase' for 2:Integer)
app/controllers/application_controller.rb:424:in `block in with_resolved_locale'
app/controllers/application_controller.rb:424:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:14:in `call'
lib/freedom_patches/rails_rack_logger_from_rails_7_2.rb:35:in `call_app'
lib/freedom_patches/rails_rack_logger_from_rails_7_2.rb:22:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/missing_avatars.rb:22:in `call'
lib/middleware/turbo_dev.rb:31:in `call'
lib/middleware/processing_request.rb:12:in `call'
Backtrace
plugins/discourse-data-explorer/lib/discourse_data_explorer/parameter.rb:121:in `cast_to_ruby'
...
Questo formato funziona correttamente:
-F 'params={\"user_id\":\"2\"}'
Sto condividendo questo non perché sono pignolo, ma per risparmiare tempo a chiunque possa incontrare un problema simile a quello che ho avuto. Mi ci è voluto un po’ per capire cosa stesse causando il problema.