Страница ошибок Rails по умолчанию не отображается при разработке - PullRequest
0 голосов
/ 29 мая 2019

Я создал обработчик ошибок, который при возникновении ошибки в любом из методов контроллера в рабочей среде перенаправляет пользователя на страницу ошибок и отправляет мне, разработчику, электронное письмо с уведомлением.Это работает, но я хочу, чтобы во время разработки появлялся обычный экран ошибок.Я предполагал, что код для создания этого был просто raise e, но вместо этого в процессе разработки я теперь получаю страницу ошибки по умолчанию production (ту, которая говорит: «Извините, но что-то пошло не так».), вместо подробного сообщения об ошибке и трассировки, которые раньше отображались.

class ApplicationController < ActionController::Base
  rescue_from StandardError, with: :handle_error

  #error handler
  def handle_error(e)
    if Rails.env.production?
      #code to send email and redirect to error page
    else
      raise e
    end
  end
end

Я также попытался сделать следующее:

raise
raise StandardError.new e
raise e, e.message
raise e.message

, и если я запусту любой из них в binding.pry console, они выдают сообщение об ошибке, которое я ищу, но на странице ошибки все еще просто написано «Извините, но что-то пошло не так».

Кто-нибудь знает, как я могу просто показатьстраница ошибки разработки по умолчанию?


ОБНОВЛЕНИЕ

Это безумие ... поэтому код для отображения ошибки обычно должен определенно работать, но что-тогде-то это мешает.Если я изменяю config.consider_all_requests_local = true на производстве, ошибки появляются на производстве, но даже если я скопирую и вставлю свой файл config / environment / production.rb в мой config / environment / development.rb, ошибки все равно не отобразятсяна развитие.Если я вхожу в консоль pry, request.local? возвращает «0», что означает «истина», а Rails.env возвращает «развитие».Я понятия не имею, что происходит.

ОБНОВЛЕНИЕ 2

Очевидно, я не должен спасать исключения при разработке, но даже если я удаляю каждый битПользовательский код обработки ошибок, поэтому мой Application Controller просто пуст, мои ошибки по-прежнему не отображаются при разработке.Кроме того, у меня есть другое приложение с тем же самым точным кодом обработки ошибок, и для этого ошибки показывают.

Ответы [ 3 ]

1 голос
/ 30 мая 2019

Найдите в вашем коде consider_all_requests_local, именно эта конфигурация отображает полный журнал ошибок.

Он должен быть установлен как true в вашем файле конфигурации development.rb. Он либо отсутствует в ваших конфигах, либо другой конфиг перезаписывает его

1 голос
/ 08 июня 2019

Это не "безумие", это вполне ожидаемое поведение. Вы не можете raise из обработчика rescue_from. Это вызвало бы бесконечный цикл.

Вы также не можете rescue_from StandardError, как указано в документации:

Использование rescue_from с Exception или StandardError может привести к серьезным побочным эффектам, поскольку это мешает Rails правильно обрабатывать исключения. Поэтому делать это не рекомендуется, если на то нет веских причин.

Вместо условной обработки исключения внутри вашего обработчика rescue_from вы должны условно связать обработчик и выбрать более конкретный класс исключений для обработки.

class ApplicationController < ActionController::Base
  rescue_from StandardError, with: :handle_error if Rails.env.production?

  #error handler
  def handle_error(e)
    #code to send email and redirect to error page
  end
end
0 голосов
/ 29 мая 2019

создать ErrorsController, как показано ниже

class ErrorsController < ApplicationController
   skip_before_action :login

   def not_found
     respond_to do |format|
       format.html { render status: 404 }
       format.json { render json: { error: "Not found" }, status: 404 }
     end
   end
end
...