Reference: Run Data Explorer queries with the Discourse API
APIを使用してSQLクエリにパラメータを渡す場合、Discourseは現在、整数(一部のシステム(特にPHPのjson_encode)ではデフォルトでカプセル化されない)を含むすべての値を二重引用符で囲む必要があります。 JSON RFCを見ると、整数に二重引用符を使用する必要はありません。この要件は、「受け入れるものに対して寛容である」という哲学にも反します。
再現方法:
-F 'params={\"user_id\":2}'
サーバーは500 Internal Server Errorを返します。
エラーログには次のように表示されます。
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'
...
この形式は正しく機能します。
-F 'params={\"user_id\":\"2\"}'
これは私が細かいことにうるさいから共有しているのではなく、私と同じような問題に遭遇した人の時間を節約するためです。問題の原因を突き止めるのにかなりの時間がかかりました。