2012-02-03 28 views
11

Tôi đang sử dụng đường ray 3.1.3. Tôi có một mẫu với rất nhiều lĩnh vực. Khi biểu mẫu được gửi, tôi nhận được lỗi nàyĐường ray/javascript: "quá nhiều phím thông số" - cách tốt để chuẩn hóa dữ liệu biểu mẫu là gì?

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' 

Vì vậy, dường như có quá nhiều cặp k/v được gửi. Cách tốt để giải quyết vấn đề này là gì? Tôi nghĩ rằng tôi sẽ chặn việc gửi biểu mẫu bằng javascript, sau đó mã hóa nó bằng cách nào đó để chỉ có một cặp k/v, sau đó giải mã nó thành một thông số băm thông thường trên máy chủ ứng dụng. Bất kỳ hướng dẫn nào cho phương pháp này, hoặc cách tiếp cận tốt hơn sẽ được đánh giá cao.

+0

bất kỳ ý tưởng nào có bao nhiêu khóa và các tham số lồng nhau sâu sắc như thế nào? Tôi chưa từng gặp vấn đề này. –

+0

ah ... chỉ cần tìm kiếm ... thay đổi này chỉ được thêm vào một vài ngày trước. https://github.com/rack/rack/commit/7bb8d20997eb2bd2bb1a160ab7bdef6aac55ecce –

+0

Tôi có thể nói đây là vấn đề thiết kế. Tôi sẽ cố gắng giảm số lượng trường. – akonsu

Trả lời

33

Vấn đề này đã được giới thiệu bởi Rack vài bản phát hành trước đây. Tham khảo các báo cáo này (1, 2). Tôi đã giải quyết vấn đề bằng cách thêm mã sau vào tệp khởi tạo.

if Rack::Utils.respond_to?("key_space_limit=") 
    Rack::Utils.key_space_limit = 262144 
end 
+0

Tệp trình khởi tạo nào? –

+2

@NateCook Tôi đã thêm tệp 'rack_initializer.rb' vào thư mục' initialziers'. –

+0

Điều cần biết. Tôi nhận thấy bây giờ rằng tôi enventually chỉ cần đặt nó trong tập tin environment.rb của tôi, mà cũng có vẻ làm việc tốt. –

Các vấn đề liên quan