2010-04-16 15 views
27

Tôi đã một bộ điều khiển rất đơn giản thiết lập:lỗi WEBrick :: HTTPStatus :: LengthRequired khi truy cập vào tạo phương pháp trong điều khiển

class LibrariesController < ApplicationController 

... 

    def create 
    @user.libraries << Library.new(params) 
    @user.save 
    render :json => "success!" 
    end 

... 

end 

Về cơ bản, bất cứ khi nào tôi cố gắng truy cập vào các phương pháp tạo của LibrariesController sử dụng HTTParty.post tôi nhận được WEBrick :: HTTPStatus :: Lỗi LengthRequired trên máy chủ. Phương thức này thậm chí không được truy cập! Dưới đây là stack trace (đây là phía máy chủ sản lượng đầy đủ - nhận thấy rằng bộ điều khiển được thậm chí không được truy cập):

[2010-04-16 00:35:39] ERROR WEBrick::HTTPStatus::LengthRequired 
[2010-04-16 00:35:39] ERROR HTTPRequest#fixup: WEBrick::HTTPStatus::LengthRequired occured. 
[2010-04-16 00:35:39] ERROR NoMethodError: private method `gsub!' called for #<Class:0x2362160> 
    /usr/local/Cellar/ruby_187/1.8.7-p249/lib/ruby/1.8/webrick/htmlutils.rb:17:in `escape' 
    /usr/local/Cellar/ruby_187/1.8.7-p249/lib/ruby/1.8/webrick/httpresponse.rb:232:in `set_error' 
    /usr/local/Cellar/ruby_187/1.8.7-p249/lib/ruby/1.8/webrick/httpserver.rb:70:in `run' 
    /usr/local/Cellar/ruby_187/1.8.7-p249/lib/ruby/1.8/webrick/server.rb:173:in `start_thread' 
    /usr/local/Cellar/ruby_187/1.8.7-p249/lib/ruby/1.8/webrick/server.rb:162:in `start' 
    /usr/local/Cellar/ruby_187/1.8.7-p249/lib/ruby/1.8/webrick/server.rb:162:in `start_thread' 
    /usr/local/Cellar/ruby_187/1.8.7-p249/lib/ruby/1.8/webrick/server.rb:95:in `start' 
    /usr/local/Cellar/ruby_187/1.8.7-p249/lib/ruby/1.8/webrick/server.rb:92:in `each' 
    /usr/local/Cellar/ruby_187/1.8.7-p249/lib/ruby/1.8/webrick/server.rb:92:in `start' 
    /usr/local/Cellar/ruby_187/1.8.7-p249/lib/ruby/1.8/webrick/server.rb:23:in `start' 
    /usr/local/Cellar/ruby_187/1.8.7-p249/lib/ruby/1.8/webrick/server.rb:82:in `start' 
    /usr/local/Cellar/ruby_187/1.8.7-p249/lib/ruby/gems/1.8/gems/rack-1.0.1/lib/rack/handler/webrick.rb:14:in `run' 
    /usr/local/Cellar/ruby_187/1.8.7-p249/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/commands/server.rb:111 
    /usr/local/Cellar/ruby_187/1.8.7-p249/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
    /usr/local/Cellar/ruby_187/1.8.7-p249/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' 
    script/server:3 

Tôi đang chạy đường ray 2.3.5 và 1.8.7 ruby. Mọi sự trợ giúp sẽ rất được trân trọng. Hãy cho tôi biết nếu như bạn cần thêm chị tiết.

Trả lời

1

Tôi không biết nếu điều này vẫn còn có liên quan cho Webrick hoặc nếu đã được cố định nhưng có một vấn đề bí quyết cho các lỗi bạn đang nhận được Read line 2 on this TODO page on RubyForge

bạn đã thử gem install mongrel và chạy nó với thú lai hoặc khác ruby server?

+0

Điều này đúng - tuy nhiên, thông báo này được viết vào năm 2008 và nó cũng nói rằng lỗi này là "ưu tiên thấp". Tôi tự hỏi nếu tôi đã cấu hình gì đó sai ... Khi tôi chạy với mongrel tôi nhận được lỗi sau: ActionController :: InvalidAuthenticityToken (ActionController :: InvalidAuthenticityToken): cứu rendered/_trace (178.6ms) Rendered rescues/_request_and_response (1.5ms) Hiển thị kết quả/bố trí (unprocessable_entity) Hmmmmmm ... –

+0

Vâng bạn đúng Chris, nhưng đó là lời giải thích chính đáng duy nhất tôi có thể bị lỗi. Tuy nhiên lỗi Mongrel ít khó hiểu hơn, gần đây tôi đã gặp vấn đề tương tự, khi tôi đang làm việc với các phiên. Cửa hàng phiên của bạn là gì? và bạn có khóa phiên và thiết lập bí mật không? – konung

+0

Chuyển sang mongrel đã làm cho lừa cho tôi :) –

64

Tôi nhận được thông báo này khi tôi đăng một POST bằng một cơ thể trống. Tôi đã sử dụng curl.

Cái gì như:

curl -X POST http://url/ 

tôi thêm -d '' và nó xoá sổ vấn đề này.

curl -X POST http://url/ -d '' 

Trong trường hợp của bạn, bạn có thể cần thêm một số nội dung vào một: body => '' thuộc tính trong HTTParty.post

+0

Có anyway để làm điều đó mà không cần thêm '-d ''' để mô phỏng NOTHING được gửi đi, khi tôi không gửi bất cứ điều gì anyways? – Pred

+1

Nếu bạn chuyển sang một máy chủ web khác, ví dụ như máy chủ web mỏng, nó hoạt động mà không cần phải gửi một cơ thể trống. – littleforest

8

sử dụng :body thay vì :query về Bưu chính và đặt yêu cầu.

0

Tôi cũng gặp vấn đề tương tự, ngay bây giờ tôi đã giải quyết được vấn đề. Với tôi đó là vấn đề của newline char trong giá trị tiêu đề yêu cầu. Ngay sau khi máy chủ WEBrick nhận được trình duyệt biểu mẫu yêu cầu hoặc ứng dụng khách khác, nó sẽ gửi yêu cầu đến ứng dụng của bạn và ngay lập tức trả lại mã 411 với ERROR WEBrick::HTTPStatus::LengthRequired.

Vì vậy, trước khi đặt giá trị tiêu đề, bạn có thể xóa newline char.

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