Как исправить ошибку Request-URI Too Large в rails 3? - PullRequest
5 голосов
/ 19 апреля 2011

У меня ошибка, которая говорит:

Request-URI слишком большой

На самом деле я пытаюсь добавить функцию поиска в моем экспериментальном приложении rails 3, котороепринимает string и date в качестве параметров поиска.По некоторым причинам, когда я нажимаю кнопку отправки, чтобы выполнить поиск, URL-адрес в моем браузере очень длинный, и у меня возникает эта ошибка, о которой я упоминал выше.

Вот код для моей модели trap.rb:

class Trap < ActiveRecord::Base

 def self.search(empcode, date_entry)
  if empcode and date_entry
   where('empcode LIKE ? and date_entry = ?', "%#{empcode}%", "#{date_entry}")
  else
   scoped
  end
 end
end

В контроллере traps_controller.rb:

class TrapsController < ApplicationController

 def index
  @traps = Trap.search(params[:search_empcode], params[:search_date_entry])

  respond_to do |format|
   format.html # index.html.erb
   format.xml  { render :xml => @traps }
  end
 end

 .
 .
 .
end

И в представлении index.html.erb:

<h2>TRAP 1.0</h2>

<%= form_tag traps_path, :method => 'get' do  %>
 <p>
  Employee Code: <%= text_field_tag :search_empcode, params[:search_empcode] %>
  Date Entry: <%= date_select :search_date_entry, params[:search_date_entry] %>
 </p>

 <p class="buttons"> <%= submit_tag "Search", :name => nil %></p>
<% end %>

<table>
 <tr>
  <th>Empcode</th>
  <th>Date entry</th>
  <th></th>
  <th></th>
  <th></th>
 </tr>

 <% @traps.each do |trap| %>
 <tr>
  <td><%= trap.empcode %></td>
  <td><%= trap.date_entry %></td>
  <td><%= link_to 'Show', trap %></td>
  <td><%= link_to 'Edit', edit_trap_path(trap) %></td>
  <td><%= link_to 'Destroy', trap, :confirm => 'Are you sure?', :method => :delete %></td>
 </tr>
 <% end %>
</table>

<br />

<%= link_to 'New Trap', new_trap_path %>

Может кто-нибудь сказать мне, что не так с этим?Если вы знаете некоторые альтернативы.Просьба помочь ...

Ответы [ 2 ]

3 голосов
/ 07 октября 2011

Если вы хотите продолжать использовать webbrick, просто перейдите на строки 246 и 247 в ruby-version/lib/ruby/version/webrick/httprequest.rb и измените числа в байтах, я просто удвоил их:

@request_line = read_line(socket, 2048) if socket
if @request_line.bytesize >= 2048 and @request_line[-1, 1] != LF
3 голосов
/ 19 апреля 2011

У меня была эта ошибка при аутентификации по openID от google, они перенаправили меня обратно в мое собственное приложение с несколькими сотнями GET-параметров. Я не понял, в чем проблема, но вместо использования встроенного сервера Rails я начал использовать thin, и ошибка волшебным образом исчезла. Должно быть так, как сервер обрабатывает их внутренне.

Попробуйте gem install thin затем thin start из корневой директории rails.

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