【发布时间】:2017-05-02 00:45:37
【问题描述】:
当我通过网络服务发布文件时出现错误“RangeError: RangeError”。
- Sinatra 版本:sinatra (1.4.7)
- 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