Rails: пустая страница - без ошибок или трассировки стека - PullRequest
2 голосов
/ 26 марта 2010

Я пытался исправить ошибку в разрабатываемом приложении Rails, и я получаю пустой экран без ошибок. В development.log я тоже не нашел ничего полезного (хотя он показывает, что запросы выполняются и тому подобное).

Наконец, я начал задаваться вопросом, настроен ли он так, чтобы больше не отображать ошибки. Я попытался закомментировать необходимый маршрут и, конечно же, Я получил пустую страницу вместо ожидаемой ошибки и трассировки стека.

Что может вызвать это?

(Интересно, может быть, я случайно запускаю производственный режим, и ошибки не должны отображаться тогда, но development.log добавляется, и если я открываю script/console и echo ENV['RAILS_ENV'], это говорит о разработке. )

Ответы [ 2 ]

3 голосов
/ 08 апреля 2010

Как я это сломал, как я это исправил и как я усвоил урок

Я выяснил проблему, когда лежал этим утром в постели, и все сводится к тому, что «я сделал что-то глупое». (Разве не всегда?)

Умная часть

Во-первых, умная часть: я последовал несколько полезных советов по настройке контроля доступа и разрешений . Это дает вам отличный синтаксис для описания того, что разрешено, например:

<%= link_to 'Delete', @photo, :confirm => "Really delete this photo?", :method => :delete if current_user.can_delete?(@photo)%>

(Бит current_user поступает из плагина Restful-аутентификации.)

Автор также показывает, как обрабатывать случай, когда пользователь пытается ввести URL-адрес, для которого вы не дали ему ссылку. Он включает в себя настройку специального класса исключений, который подклассов StandardError, и обработку его с помощью чего-то вроде 401.html - доступ запрещен.

Глупая часть

То, что я сделал, было глупо: Я слепо следовал его примеру. Он показывает это:

def rescue_action(e)
    case e
    when SecurityTransgression
      head :forbidden
    end
end

... который обрабатывает SecurityTransgression штраф, но нарушает обработку ошибок по умолчанию в Rails . (Я уверен, что автор знает это и имел дело с этим, но он не обсуждал это.)

Решение

Решением было добавить две строки:

def rescue_action(e)
    case e
    when SecurityTransgression
      head :forbidden
    else
      super
    end
end

Часть "else super" говорит: "Если я ничего не указал здесь, пусть унаследованный метод rescue_action справится с этим."

Теперь я получаю правильную трассировку стека для моей исходной проблемы и продолжу ее устранять.

Урок: будьте осторожны, когда возитесь с обработкой исключений, и убедитесь, что регистр по умолчанию все еще работает!

1 голос
/ 26 марта 2010

Проверьте маршрут по умолчанию и убедитесь, что вид не просто пустой.

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