Ruby Sinatra:错误类型错误:没有将数组隐式转换为字符串

Ruby Sinatra:错误类型错误:没有将数组隐式转换为字符串,ruby,sinatra,Ruby,Sinatra,我制作了一个相当简单的sinatra服务器,它只打印它得到的请求来测试它的工作方式,我在本地使用它时,它工作得很好。但当我在kubernetes中输入时,它开始给我这个错误: 10.1.38.202 - - [15/Apr/2021:13:09:44 +0000] "POST /api/v1/interact HTTP/1.1" 200 - 0.0010 [2021-04-15 13:09:44] ERROR TypeError: no implicit conversion

我制作了一个相当简单的sinatra服务器,它只打印它得到的请求来测试它的工作方式,我在本地使用它时,它工作得很好。但当我在kubernetes中输入时,它开始给我这个错误:

10.1.38.202 - - [15/Apr/2021:13:09:44 +0000] "POST /api/v1/interact HTTP/1.1" 200 - 0.0010
[2021-04-15 13:09:44] ERROR TypeError: no implicit conversion of Array into String
        /usr/local/bundle/gems/rack-2.2.3/lib/rack/handler/webrick.rb:120:in `block in service'
        /usr/local/bundle/gems/rack-2.2.3/lib/rack/body_proxy.rb:41:in `each'
        /usr/local/bundle/gems/rack-2.2.3/lib/rack/body_proxy.rb:41:in `method_missing'
        /usr/local/bundle/gems/rack-2.2.3/lib/rack/handler/webrick.rb:119:in `service'
        /usr/local/lib/ruby/2.5.0/webrick/httpserver.rb:140:in `service'
        /usr/local/lib/ruby/2.5.0/webrick/httpserver.rb:96:in `run'
        /usr/local/lib/ruby/2.5.0/webrick/server.rb:307:in `block in start_thread'
10.1.14.163 - - [15/Apr/2021:13:09:44 UTC] "POST /api/v1/interact HTTP/1.1" 500 365
以下是脚本:

# server.rb
require 'sinatra'
require "sinatra/namespace"

# sinatra config
set :port, 3141
set :bind, '0.0.0.0'

# Endpoints
get '/alive' do
  'Welcome to workstreams!'
end

namespace '/api/v1' do

  before do
    content_type 'application/json'
  end

  helpers do
    def json_params
      begin
        JSON.parse(request.body.read)
      rescue
        halt 400, { message: 'Invalid JSON' }.to_json
      end
    end
  end

  post '/interact' do
    p request
    request = json_params
    p request
  end

  post '/slash' do
    request = json_params
    p request
  end
end
以下是我发送的请求:

curl --location --request POST 'http://localhost:3141/api/v1/interact' \
--header 'Content-Type: application/json' \
--data-raw '{
    "hello": "hi"
}'
我明白了

使用p打印请求是导致问题的原因。我切换到放置,现在它无缝连接


我仍然不明白为什么它只在一个实例上工作,而不在另一个实例上工作。

这是否回答了您的问题?