问题描述
我使用的是 Rails 3.1.3.我有一个包含很多字段的表单.提交表单时,我收到此错误
I'm using rails 3.1.3. I have a form with a lot of fields. When the form is submitted, I get this error
ERROR RangeError: exceeded available parameter key space
/home/james/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.3.6/lib/rack/utils.rb:99:in `block in parse_nested_query'
/home/james/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.3.6/lib/rack/utils.rb:93:in `each'
/home/james/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.3.6/lib/rack/utils.rb:93:in `parse_nested_query'
/home/james/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.3.6/lib/rack/request.rb:302:in `parse_query'
/home/james/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.3.6/lib/rack/request.rb:190:in `POST'
/home/james/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.3.6/lib/rack/methodoverride.rb:15:in `call'
/home/james/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.3.6/lib/rack/runtime.rb:17:in `call'
/home/james/.rvm/gems/ruby-1.9.3-p0/gems/activesupport-3.1.3/lib/active_support/cache/strategy/local_cache.rb:72:in `call'
/home/james/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.3.6/lib/rack/lock.rb:15:in `call'
/home/james/.rvm/gems/ruby-1.9.3-p0/gems/actionpack-3.1.3/lib/action_dispatch/middleware/static.rb:53:in `call'
/home/james/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.1.3/lib/rails/engine.rb:456:in `call'
/home/james/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.3.6/lib/rack/content_length.rb:14:in `call'
/home/james/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.1.3/lib/rails/rack/debugger.rb:21:in `call'
/home/james/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.1.3/lib/rails/rack/log_tailer.rb:14:in `call'
/home/james/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.3.6/lib/rack/handler/webrick.rb:59:in `service'
/home/james/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
/home/james/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
/home/james/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
因此显然提交了太多的 k/v 对.解决这个问题的好方法是什么?我在想我会用 javascript 拦截表单的提交,然后以某种方式对其进行编码,以便只有一个 k/v 对,然后将其解码为应用服务器上的普通 params 哈希.任何有关此方法的指南或更好的方法将不胜感激.
So apparently there are too many k/v pairs being submitted. What's a good way to get around this problem? I'm thinking that I'll intercept submission of the form with javascript, then encode it somehow so that there's only one k/v pair, then decode it to an ordinary params hash on the app server. Any guidelines for this approach, or a better approach would be appreciated.
推荐答案
这个问题是在几个版本前由 Rack 引入的.参考这些(1, 2) 报告.我通过将以下代码添加到初始化文件来解决这个问题.
This issue was introduced by Rack few releases ago. Refer to these (1, 2) reports.I addressed the issue by adding the following code to initializer file.
if Rack::Utils.respond_to?("key_space_limit=")
Rack::Utils.key_space_limit = 262144
end
这篇关于Rails/javascript:“参数键太多"- 标准化表单数据的好方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!