Rails отправляет параметры: {} вместо параметров: {"action" => "index" "controller" => "index"} - PullRequest
1 голос
/ 09 ноября 2010

Чтобы мой веб-сайт рельсов работал, даже когда база данных отключена. в def rescue_action_in_public(exception) Функция я ловлю Mysql: Ошибка исключения и отображать страницу, которая имеет ссылку на базу данных, например

    def rescue_action_in_public(exception)
    when  Mysql::Error, Errno::ECONNREFUSED, Timeout::Error 
   puts "-----the controller name #{controller_name}"
     if controller_name == "index"
                render :template => 'index/index'
     end

это прекрасно работает, когда я запускаю приложение, немедленно останавливаю БД и пытаюсь получить доступ к моим страницам.

но если я запускаю приложение, просматриваю несколько страниц и затем останавливаю БД. и теперь попробуйте получить доступ к страницам, я мог видеть пустой параметр в журналах, как

Parameters: {} 

вместо

Parameters: {"action" => "index" "controller" => "index"} 

в результате этого условия

if controller_name == "index" 

не выполняется.

Я не знаю, почему в этом сенарио не задано правильное имя контроллера. или если это что-то делать с файлом rout.rb.

1 Ответ

1 голос
/ 19 ноября 2010

Мне пришлось добавить эту строку

@controller = Routing::Routes.recognize(@request)

в

def failsafe_rescue(exception)

в файле action_controller / dispatcher.rb

def failsafe_rescue(exception)
        @controller = Routing::Routes.recognize(@request) //added line
        self.class.failsafe_response(@output, '500 Internal Server Error', exception) do
          if @controller ||= defined?(::ApplicationController) ? ::ApplicationController : Base
            @controller.process_with_exception(@request, @response, exception).out(@output)
          else
            raise exception
          end
        end
      end

, поэтому причинаэто.когда возникает исключение MYSQL: ERROR, в методе

 def dispatch

элемент управления переходит к failsafe_rescue, а не к методу

 def handle_request

, который имеет

@controller = Routing::Routes.recognize(@request)

заявление.в результате маршруты не добавляются в объект запроса.

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