-
-
Notifications
You must be signed in to change notification settings - Fork 94
Description
I have a Rails 8 application running a Grape API via the routes.rb method. When an API request is made with a JSON body the body doesn't make it to the Grape API in any form whatsoever. (It'll show up with Puma).
Is there a method I need to call to get the request body from Falcon?
Edit: This doesn't affect post params. It is specifically if you send a json body:
curl -k -X POST http://api.localhost.local:3000/api/auxilium/tickets \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "data": { "type": "ticket", "attributes": { "subject": "Test Ticket", "body": "This is a test", "ide_version": "1.0.0", "tag": "support-request" }, "relationships": { "uploads": { "data": [ { "id": "s2ds12q", "type": "upload" } ] } } } }'
edit2: Stock Rails application I can duplicate the error on a Rails controller that just renders a happy: true json response and we get back a bigger error:
`Information for cause: TypeError (no implicit conversion of nil into String):
json (2.12.2) lib/json/common.rb:338:in 'JSON::Ext::Parser.parse'
json (2.12.2) lib/json/common.rb:338:in 'JSON.parse'
activesupport (8.0.1) lib/active_support/json/decoding.rb:23:in 'ActiveSupport::JSON.decode'
actionpack (8.0.1) lib/action_dispatch/http/parameters.rb:14:in 'block in module:Parameters'
actionpack (8.0.1) lib/action_dispatch/http/parameters.rb:95:in 'ActionDispatch::Http::Parameters#parse_formatted_parameters'
actionpack (8.0.1) lib/action_dispatch/http/request.rb:412:in 'block in ActionDispatch::Request#POST'
rack (3.1.16) lib/rack/request.rb:107:in 'Hash#fetch'
rack (3.1.16) lib/rack/request.rb:107:in 'Rack::Request::Env#fetch_header'
actionpack (8.0.1) lib/action_dispatch/http/request.rb:408:in 'ActionDispatch::Request#POST'
actionpack (8.0.1) lib/action_dispatch/http/parameters.rb:57:in 'ActionDispatch::Http::Parameters#parameters'
actionpack (8.0.1) lib/action_controller/metal/strong_parameters.rb:1522:in 'ActionController::StrongParameters#params'
actionpack (8.0.1) lib/action_controller/metal/request_forgery_protection.rb:606:in 'ActionController::RequestForgeryProtection#form_authenticity_param'
actionpack (8.0.1) lib/action_controller/metal/request_forgery_protection.rb:475:in 'ActionController::RequestForgeryProtection#request_authenticity_tokens'
actionpack (8.0.1) lib/action_controller/metal/request_forgery_protection.rb:468:in 'ActionController::RequestForgeryProtection#any_authenticity_token_valid?'
actionpack (8.0.1) lib/action_controller/metal/request_forgery_protection.rb:463:in 'ActionController::RequestForgeryProtection#verified_request?'
actionpack (8.0.1) lib/action_controller/metal/request_forgery_protection.rb:392:in 'ActionController::RequestForgeryProtection#verify_authenticity_token'
activesupport (8.0.1) lib/active_support/callbacks.rb:361:in 'block in ActiveSupport::Callbacks::CallTemplate::MethodCall#make_lambda'
activesupport (8.0.1) lib/active_support/callbacks.rb:178:in 'block in ActiveSupport::Callbacks::Filters::Before#call'
actionpack (8.0.1) lib/abstract_controller/callbacks.rb:34:in 'block (2 levels) in module:Callbacks'
activesupport (8.0.1) lib/active_support/callbacks.rb:179:in 'ActiveSupport::Callbacks::Filters::Before#call'
activesupport (8.0.1) lib/active_support/callbacks.rb:558:in 'block in ActiveSupport::Callbacks::CallbackSequence#invoke_before'
activesupport (8.0.1) lib/active_support/callbacks.rb:558:in 'Array#each'
activesupport (8.0.1) lib/active_support/callbacks.rb:558:in 'ActiveSupport::Callbacks::CallbackSequence#invoke_before'
activesupport (8.0.1) lib/active_support/callbacks.rb:118:in 'block in ActiveSupport::Callbacks#run_callbacks'
turbo-rails (2.0.16) lib/turbo-rails.rb:24:in 'Turbo.with_request_id'
turbo-rails (2.0.16) app/controllers/concerns/turbo/request_id_tracking.rb:10:in 'Turbo::RequestIdTracking#turbo_tracking_request_id'
activesupport (8.0.1) lib/active_support/callbacks.rb:129:in 'block in ActiveSupport::Callbacks#run_callbacks'
actiontext (8.0.1) lib/action_text/rendering.rb:25:in 'ActionText::Rendering::ClassMethods#with_renderer'
actiontext (8.0.1) lib/action_text/engine.rb:71:in 'block (4 levels) in class:Engine'
activesupport (8.0.1) lib/active_support/callbacks.rb:129:in 'BasicObject#instance_exec'
activesupport (8.0.1) lib/active_support/callbacks.rb:129:in 'block in ActiveSupport::Callbacks#run_callbacks'
activesupport (8.0.1) lib/active_support/callbacks.rb:140:in 'ActiveSupport::Callbacks#run_callbacks'
actionpack (8.0.1) lib/abstract_controller/callbacks.rb:260:in 'AbstractController::Callbacks#process_action'
actionpack (8.0.1) lib/action_controller/metal/rescue.rb:27:in 'ActionController::Rescue#process_action'
actionpack (8.0.1) lib/action_controller/metal/instrumentation.rb:76:in 'block in ActionController::Instrumentation#process_action'
activesupport (8.0.1) lib/active_support/notifications.rb:210:in 'block in ActiveSupport::Notifications.instrument'
activesupport (8.0.1) lib/active_support/notifications/instrumenter.rb:58:in 'ActiveSupport::Notifications::Instrumenter#instrument'
activesupport (8.0.1) lib/active_support/notifications.rb:210:in 'ActiveSupport::Notifications.instrument'
actionpack (8.0.1) lib/action_controller/metal/instrumentation.rb:75:in 'ActionController::Instrumentation#process_action'
actionpack (8.0.1) lib/action_controller/metal/params_wrapper.rb:259:in 'ActionController::ParamsWrapper#process_action'
activerecord (8.0.1) lib/active_record/railties/controller_runtime.rb:39:in 'ActiveRecord::Railties::ControllerRuntime#process_action'
actionpack (8.0.1) lib/abstract_controller/base.rb:163:in 'AbstractController::Base#process'
actionview (8.0.1) lib/action_view/rendering.rb:40:in 'ActionView::Rendering#process'
actionpack (8.0.1) lib/action_controller/metal.rb:252:in 'ActionController::Metal#dispatch'
actionpack (8.0.1) lib/action_controller/metal.rb:335:in 'ActionController::Metal.dispatch'
actionpack (8.0.1) lib/action_dispatch/routing/route_set.rb:67:in 'ActionDispatch::Routing::RouteSet::Dispatcher#dispatch'
actionpack (8.0.1) lib/action_dispatch/routing/route_set.rb:50:in 'ActionDispatch::Routing::RouteSet::Dispatcher#serve'
actionpack (8.0.1) lib/action_dispatch/journey/router.rb:53:in 'block in ActionDispatch::Journey::Router#serve'
actionpack (8.0.1) lib/action_dispatch/journey/router.rb:133:in 'block in ActionDispatch::Journey::Router#find_routes'
actionpack (8.0.1) lib/action_dispatch/journey/router.rb:126:in 'Array#each'
actionpack (8.0.1) lib/action_dispatch/journey/router.rb:126:in 'ActionDispatch::Journey::Router#find_routes'
actionpack (8.0.1) lib/action_dispatch/journey/router.rb:34:in 'ActionDispatch::Journey::Router#serve'
actionpack (8.0.1) lib/action_dispatch/routing/route_set.rb:908:in 'ActionDispatch::Routing::RouteSet#call'
omniauth (2.1.3) lib/omniauth/strategy.rb:202:in 'OmniAuth::Strategy#call!'
omniauth (2.1.3) lib/omniauth/strategy.rb:169:in 'OmniAuth::Strategy#call'
actionpack (8.0.1) lib/action_dispatch/middleware/static.rb:27:in 'ActionDispatch::Static#call'
omniauth (2.1.3) lib/omniauth/strategy.rb:202:in 'OmniAuth::Strategy#call!'
omniauth (2.1.3) lib/omniauth/strategy.rb:169:in 'OmniAuth::Strategy#call'
omniauth (2.1.3) lib/omniauth/strategy.rb:202:in 'OmniAuth::Strategy#call!'
omniauth (2.1.3) lib/omniauth/strategy.rb:169:in 'OmniAuth::Strategy#call'
omniauth (2.1.3) lib/omniauth/strategy.rb:202:in 'OmniAuth::Strategy#call!'
omniauth (2.1.3) lib/omniauth/strategy.rb:169:in 'OmniAuth::Strategy#call'
omniauth (2.1.3) lib/omniauth/strategy.rb:202:in 'OmniAuth::Strategy#call!'
omniauth (2.1.3) lib/omniauth/strategy.rb:169:in 'OmniAuth::Strategy#call'
omniauth (2.1.3) lib/omniauth/strategy.rb:202:in 'OmniAuth::Strategy#call!'
omniauth (2.1.3) lib/omniauth/strategy.rb:169:in 'OmniAuth::Strategy#call'
omniauth (2.1.3) lib/omniauth/strategy.rb:202:in 'OmniAuth::Strategy#call!'
omniauth (2.1.3) lib/omniauth/strategy.rb:169:in 'OmniAuth::Strategy#call'
omniauth (2.1.3) lib/omniauth/builder.rb:44:in 'OmniAuth::Builder#call'
rack-attack (6.7.0) lib/rack/attack.rb:103:in 'Rack::Attack#call'
scout_apm (5.6.4) lib/scout_apm/instant/middleware.rb:55:in 'ScoutApm::Instant::Middleware#call'
scout_apm (5.6.4) lib/scout_apm/middleware.rb:20:in 'ScoutApm::Middleware#call'
warden (1.2.9) lib/warden/manager.rb:36:in 'block in Warden::Manager#call'
warden (1.2.9) lib/warden/manager.rb:34:in 'Kernel#catch'
warden (1.2.9) lib/warden/manager.rb:34:in 'Warden::Manager#call'
rack (3.1.16) lib/rack/tempfile_reaper.rb:20:in 'Rack::TempfileReaper#call'
rack (3.1.16) lib/rack/etag.rb:29:in 'Rack::ETag#call'
rack (3.1.16) lib/rack/conditional_get.rb:43:in 'Rack::ConditionalGet#call'
rack (3.1.16) lib/rack/head.rb:15:in 'Rack::Head#call'
actionpack (8.0.1) lib/action_dispatch/http/permissions_policy.rb:38:in 'ActionDispatch::PermissionsPolicy::Middleware#call'
actionpack (8.0.1) lib/action_dispatch/http/content_security_policy.rb:38:in 'ActionDispatch::ContentSecurityPolicy::Middleware#call'
rack-session (2.1.1) lib/rack/session/abstract/id.rb:274:in 'Rack::Session::Abstract::Persisted#context'
rack-session (2.1.1) lib/rack/session/abstract/id.rb:268:in 'Rack::Session::Abstract::Persisted#call'
actionpack (8.0.1) lib/action_dispatch/middleware/cookies.rb:706:in 'ActionDispatch::Cookies#call'
activerecord (8.0.1) lib/active_record/migration.rb:671:in 'ActiveRecord::Migration::CheckPending#call'
actionpack (8.0.1) lib/action_dispatch/middleware/callbacks.rb:31:in 'block in ActionDispatch::Callbacks#call'
activesupport (8.0.1) lib/active_support/callbacks.rb:100:in 'ActiveSupport::Callbacks#run_callbacks'
actionpack (8.0.1) lib/action_dispatch/middleware/callbacks.rb:30:in 'ActionDispatch::Callbacks#call'
actionpack (8.0.1) lib/action_dispatch/middleware/executor.rb:16:in 'ActionDispatch::Executor#call'
actionpack (8.0.1) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in 'ActionDispatch::ActionableExceptions#call'
airbrake (13.0.5) lib/airbrake/rack/middleware.rb:34:in 'Airbrake::Rack::Middleware#call!'
airbrake (13.0.5) lib/airbrake/rack/middleware.rb:23:in 'Airbrake::Rack::Middleware#call'
actionpack (8.0.1) lib/action_dispatch/middleware/debug_exceptions.rb:31:in 'ActionDispatch::DebugExceptions#call'
web-console (4.2.1) lib/web_console/middleware.rb:132:in 'WebConsole::Middleware#call_app'
web-console (4.2.1) lib/web_console/middleware.rb:28:in 'block in WebConsole::Middleware#call'
web-console (4.2.1) lib/web_console/middleware.rb:17:in 'Kernel#catch'
web-console (4.2.1) lib/web_console/middleware.rb:17:in 'WebConsole::Middleware#call'
actionpack (8.0.1) lib/action_dispatch/middleware/show_exceptions.rb:32:in 'ActionDispatch::ShowExceptions#call'
lograge (0.14.0) lib/lograge/rails_ext/rack/logger.rb:18:in 'Rails::Rack::Logger#call_app'
railties (8.0.1) lib/rails/rack/logger.rb:29:in 'Rails::Rack::Logger#call'
actionpack (8.0.1) lib/action_dispatch/middleware/remote_ip.rb:96:in 'ActionDispatch::RemoteIp#call'
request_store (1.7.0) lib/request_store/middleware.rb:19:in 'RequestStore::Middleware#call'
actionpack (8.0.1) lib/action_dispatch/middleware/request_id.rb:34:in 'ActionDispatch::RequestId#call'
rack (3.1.16) lib/rack/method_override.rb:28:in 'Rack::MethodOverride#call'
rack (3.1.16) lib/rack/runtime.rb:24:in 'Rack::Runtime#call'
actionpack (8.0.1) lib/action_dispatch/middleware/server_timing.rb:61:in 'block in ActionDispatch::ServerTiming#call'
actionpack (8.0.1) lib/action_dispatch/middleware/server_timing.rb:26:in 'ActionDispatch::ServerTiming::Subscriber#collect_events'
actionpack (8.0.1) lib/action_dispatch/middleware/server_timing.rb:60:in 'ActionDispatch::ServerTiming#call'
actionpack (8.0.1) lib/action_dispatch/middleware/executor.rb:16:in 'ActionDispatch::Executor#call'
actionpack (8.0.1) lib/action_dispatch/middleware/static.rb:27:in 'ActionDispatch::Static#call'
rack (3.1.16) lib/rack/sendfile.rb:114:in 'Rack::Sendfile#call'
actionpack (8.0.1) lib/action_dispatch/middleware/host_authorization.rb:143:in 'ActionDispatch::HostAuthorization#call'
utf8-cleaner (1.0.0) lib/utf8-cleaner/middleware.rb:21:in 'UTF8Cleaner::Middleware#call'
rack-mini-profiler (4.0.0) lib/mini_profiler.rb:334:in 'Rack::MiniProfiler#call'
rack-cors (3.0.0) lib/rack/cors.rb:102:in 'Rack::Cors#call'
railties (8.0.1) lib/rails/engine.rb:535:in 'Rails::Engine#call'
protocol-rack (0.14.0) lib/protocol/rack/adapter/generic.rb:146:in 'Protocol::Rack::Adapter::Generic#call'
protocol-http (0.50.1) lib/protocol/http/middleware.rb:53:in 'Protocol::HTTP::Middleware#call'
falcon (0.51.1) lib/falcon/server.rb:66:in 'Falcon::Server#call'
async-http (0.89.0) lib/async/http/server.rb:58:in 'block in Async::HTTP::Server#accept'
async-http (0.89.0) lib/async/http/protocol/http1/server.rb:72:in 'Async::HTTP::Protocol::HTTP1::Server#each'
async-http (0.89.0) lib/async/http/server.rb:50:in 'Async::HTTP::Server#accept'
falcon (0.51.1) lib/falcon/server.rb:57:in 'Falcon::Server#accept'
io-endpoint (0.15.2) lib/io/endpoint/wrapper.rb:216:in 'block (2 levels) in IO::Endpoint::Wrapper#accept'
async (2.25.0) lib/async/task.rb:201:in 'block in Async::Task#run'
async (2.25.0) lib/async/task.rb:439:in 'block in Async::Task#schedule'
`