Ошибка WEBrick :: HTTPStatus :: LengthRequired при доступе к методу создания в контроллере - PullRequest
28 голосов
/ 16 апреля 2010

У меня очень простой контроллер:

class LibrariesController < ApplicationController

...

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

...

end

По сути, всякий раз, когда я пытаюсь получить доступ к методу создания LibrariesController с помощью HTTParty.post, на сервере я получаю ошибку WEBrick :: HTTPStatus :: LengthRequired. Метод даже не доступен! Вот трассировка стека (это полная сторона сервера вывода - обратите внимание, что к контроллеру даже нет доступа):

[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

Я использую рельсы 2.3.5 и ruby ​​1.8.7. Любая помощь будет принята с благодарностью. Дайте мне знать, если вам нужно больше деталей.

Ответы [ 4 ]

68 голосов
/ 31 октября 2010

Я получил это, когда сделал POST с пустым телом. Я использовал локон.

Что-то вроде:

curl -X POST http://url/

Я добавил -d '', и это решило проблему.

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

В вашем случае вам, вероятно, нужно добавить некоторое содержимое в атрибут: body => '' в HTTParty.post

8 голосов
/ 11 января 2011

используйте :body вместо :query для публикации и отправки запросов.

1 голос
/ 16 апреля 2010

Я не знаю, относится ли это к Webrick, или это было исправлено, но есть известная проблема для получаемой ошибки Прочитайте строку 2 на этой странице TODO в RubyForge

Вы пробовали gem install mongrel и запускали его с помощью mongrel или другого сервера ruby?

0 голосов
/ 08 марта 2012

У меня тоже была такая же проблема, только сейчас я решил ее. Со мной это была проблема символа новой строки в значении заголовка запроса. Как только сервер WEBrick получает браузер формы запроса или другой клиент, он отправляет запрос в ваше приложение и немедленно возвращает код 411 с ERROR WEBrick::HTTPStatus::LengthRequired.

Так что перед установкой значения заголовка вы можете удалить символ новой строки, вот и все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...