В моем приложении Rails я пытаюсь создать форму, которая позволяет пользователям создавать закладки.
<% form_tag( contents_path ) do %>
<input name='item_type' value="Bookmark" type="hidden" /></p>
<h3>Create New Bookmark</h3>
<p>Title:<input name='item[title]' type="text" /></p>
<p>URL:<input name='item[url]' type="text" /></p>
<%= submit_tag 'Create' %>
<% end %>
<ч />
Изменить: для ясности, вот фактический HTML-код, сгенерированный с помощью вышеуказанного шаблона:
<form action="/contents" method="post"><div style="margin:0;padding:0"><input name="authenticity_token" type="hidden" value="cc709c404365f1a5754a7bf0c3fe79ce9ec9f96b" /></div>
<input name='item_type' value="Bookmark" type="hidden" /></p>
<h3>Create New Bookmark</h3>
<p>Title:<input name='item[title]' type="text" /></p>
<p>URL:<input name='item[url]' type="text" /></p>
<input name="commit" type="submit" value="Create" />
</form>
Как видите, это совершенно нормальная форма.
<ч />
Он отлично работает, если не введен фактический URL, в этом случае сервер никогда не отвечает, и я получаю сообщение в моем файле mongrel.log
Error reading HTTP body: #<RuntimeError: Socket read return nil>
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel/http_request.rb:105:in `read_socket'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel/http_request.rb:77:in `read_body'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel/http_request.rb:55:in `initialize'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:149:in `new'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:149:in `process_client'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:285:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:285:in `initialize'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:285:in `new'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:285:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:268:in `initialize'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:268:in `new'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel.rb:268:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel/configurator.rb:282:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel/configurator.rb:281:in `each'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel/configurator.rb:281:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/mongrel_rails:128:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel/command.rb:212:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/mongrel_rails:281
/usr/bin/mongrel_rails:16:in `load'
/usr/bin/mongrel_rails:16
Как видно, запрос никогда не достигает кода моего контроллера.
С тех пор я обнаружил, что отправка любой формы, где значение поля начинается со строки "http: /", вызывает проблему. помещая любые другие символы или пробелы, прежде чем это решит проблему. Я также пробовал это в других приложениях Rails (на том же сервере) с тем же результатом.
Таким образом, можно обойти проблему, вставив дополнительное место в начале строки и удалив его на сервере.
Но я бы предпочел исправление на стороне сервера, только если это возможно.
Я надеюсь, что это просто неверная конфигурация на сервере.
Я работаю под Rails 2.1.0 на основе общего хостинга на основе CPanel.