【问题标题】:Ruby Error RangeError when post file发布文件时出现Ruby错误RangeError
【发布时间】:2017-05-02 00:45:37
【问题描述】:

当我通过网络服务发布文件时出现错误“RangeError: RangeError”。

  1. Sinatra 版本:sinatra (1.4.7)
  2. Ruby 版本:2.3.1

查看下面的错误堆栈:

RangeError: RangeError

    /home/greg/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/utils.rb:135:in `normalize_params'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/utils.rb:163:in `normalize_params'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/utils.rb:122:in `block in parse_nested_query'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/utils.rb:119:in `each'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/utils.rb:119:in `parse_nested_query'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/request.rb:371:in `parse_query'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/request.rb:215:in `POST'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/methodoverride.rb:39:in `method_override_param'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/methodoverride.rb:27:in `method_override'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/methodoverride.rb:15:in `call'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/show_exceptions.rb:25:in `call'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:182:in `call'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:2013:in `call'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1487:in `block in call'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1787:in `synchronize'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1487:in `call'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/thin-1.7.0/lib/thin/connection.rb:86:in `block in pre_process'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/thin-1.7.0/lib/thin/connection.rb:84:in `catch'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/thin-1.7.0/lib/thin/connection.rb:84:in `pre_process'
    /home/greg/.rvm/gems/ruby-2.3.1/gems/thin-1.7.0/lib/thin/connection.rb:50:in `block in process'

查看下面使用的代码:

require 'rubygems'
require 'sinatra'

set :bind, '127.0.0.1'
set :port, '4567'

post '/test' do

  body "Hello"
  status 202
  return

end

请参阅下面发布的文件:

{
  "caller":"TEST",
  "c1": [ { "a" : ["b" ] } ],
  "c2": [ { "a" : ["b" ] } ],
  "c3": [ { "a" : ["b" ] } ],
  "c4": [ { "a" : ["b" ] } ],
  "c5": [ { "a" : ["b" ] } ],
  "c6": [ { "a" : ["b" ] } ],
  "c7": [ { "a" : ["b" ] } ],
  "c8": [ { "a" : ["b" ] } ],
  "c9": [ { "a" : ["b" ] } ],
  "c10": [ { "a" : ["b" ] } ],
  "c11": [ { "a" : ["b" ] } ],
  "c12": [ { "a" : ["b" ] } ],
  "c13": [ { "a" : ["b" ] } ],
  "c14": [ { "a" : ["b" ] } ],
  "c15": [ { "a" : ["b" ] } ],
  "c16": [ { "a" : ["b" ] } ],
  "c17": [ { "a" : ["b" ] } ],
  "c18": [ { "a" : ["b" ] } ],
  "c19": [ { "a" : ["b" ] } ],
  "c20": [ { "a" : ["b" ] } ],
  "c21": [ { "a" : ["b" ] } ],
  "c22": [ { "a" : ["b" ] } ],
  "c23": [ { "a" : ["b" ] } ],
  "c24": [ { "a" : ["b" ] } ],
  "c25": [ { "a" : ["b" ] } ]
}

请参阅下面用于发布我的文件的命令:

curl -v -H 'Accept: application/text' -X POST http://127.0.0.1:4567/test -d @$1

我认为问题在于 JSON 结构。

我尝试在 PHP 服务器、Python 和 Java 服务器中发布这个 JSON,并且它可以工作。

数组数量的限制可能是由于 Sinatra 框架。 当我发布一个包含 49 个数组的文件时,它可以工作,但超过 50 个它会失败。

提前致谢。

【问题讨论】:

  • Eroor 是由于 cURL 命令:curl -v -H 'Accept: application/json' -H 'Content-Type: application/json' -X POST @ 987654321@ -d @$1

标签: ruby-on-rails json ruby sinatra


【解决方案1】:

正如@Greg 提到的,为了解决这个问题,我只需要添加标题 -H 'Accept: application/json' -H 'Content-Type: application/json'查询

【讨论】:

    猜你喜欢
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    相关资源
    最近更新 更多