2013-07-16 4 views
1

ActionController :: RoutingError (нет маршрута матчей [не GET] «/google83362a7a0f381ff0.html»):Как предотвратить нежелательные ошибки маршрутизации в производстве

  1. Я вижу выше журналов в производстве, как я должен предотвратить ,
  2. Если пользователь в URL ошибок при вводе, как я должен перенаправить на общую страницу ошибки

ответ

6

Вы можете перенаправить пользователя на страницу желании вы хотите, если маршрут не вышлет

Запишите следующий код в нижней части routes.rb файла

в /config/routes.rb

#If no route matches 
match ":url" => "application#redirect_user", :constraints => { :url => /.*/ } 

Затем перенаправить пользователя на страницу ошибки в файле application_controller.rb

* В /app/controllers/application_controller.rb*

def redirect_user 
    redirect_to '/404' 
end 
-1

Rails делает это автоматически, когда приложение работает в производственной mode.When приложения загрузки на сервер жить, Rails заботится о работе с теми, исключения и отображение правильных страниц ошибок с правильным статусом заголовка. Вы можете напрямую находить файлы в общей папке.

Всякий раз, когда вы настраиваете приложение Rails на реальном сервере, вы предоставляете корень сайта как/общедоступную папку в своем приложении. Затем, всякий раз, когда делается запрос на этот адрес сервера, веб-сервер сначала просматривает эту общую папку и пытается обслуживать статический актив (это настраиваемый параметр в config/environment.rb). Если он не может найти запрошенную страницу, запрос пересылается через стек Ruby.

В режиме производства, если Rails обнаруживает ошибку, которая не обрабатывается, она выдает сообщение об ошибке в стек, а затем сообщает веб-серверу о возникновении соответствующей ошибки.

Вот некоторые распространенные ошибки, которые вы будете видеть в режиме разработки, и что они делают в рабочем режиме:

ActiveRecord::RecordNotFound => 404 (page not found) 
nil.method => 500 (server error) unless you turn off whiny nils 
ActionController::RoutingError => 404 (page not found) 
1

Вам не нужно запускать контроллер для сделай это.

Просто добавьте это как последнее правило в routes.rb:

match '*path', via: :all, to: redirect('/404')

Смежные вопросы