#ruby-on-rails #ruby-on-rails-3 #http #http-response-codes
#ruby-on-rails #ruby-on-rails-3 #http #http-response-codes
Вопрос:
Использование Devise для аутентификации. На контроллере, который имеет:
before_filter authenticate_user!, :except => [ :index, :show ]
Я всегда получаю 304 Not Modified
код состояния вместо 200 OK
при аутентифицированных действиях, даже в браузере при входе в систему. Представления отображаются и работают просто отлично.
Это останавливает прохождение моих тестов:
describe 'GET index' do
it 'should be successful' do
get 'index'
response.should be_success # Fails due to 304 status code
end
end
Сначала я думал, что это ошибка моего контроллера, но, кроме before_filter
и decent_exposure
, контроллер не мог быть более распространенным.
Что может быть причиной этой проблемы?
Комментарии:
1. 304 может быть возвращено только в ответ на условный запрос GET .
Ответ №1:
304
s — хорошая вещь. В данном случае это то, что ожидается (и желательно), даже если это может вызвать проблемы в некоторых ваших тестах. 304
Означает, что ваш веб-сервер и клиент обмениваются данными таким образом, чтобы разрешить кэширование ответа веб-сервера.
Я не совсем знаком с Rails, но я подозреваю, что существует встроенный механизм, который кэширует ваши ответы. Вот статья Rails о кэшировании:
http://guides.rubyonrails.org/caching_with_rails.html
И вот что выглядит как способ отключить кэширование на уровне контроллера / действия (игнорируйте части о iframes… также это может быть не лучшим способом):
http://arjunghosh.wordpress.com/2008/04/29/how-to-force-the-browser-to-not-cache-in-rails/
Комментарии:
1. Что сбивает с толку, так это то, что кэширование уже отключено в
test
среде. Если я правильно понял, любое из моих действий контроллера может вернуть этот статус, правильно? Тогда что-то еще должно быть не так…
Ответ №2:
Тесты завершились неудачей, потому что я использовал Devise для аутентификации с подтверждаемым модулем и не использовал подтвержденных пользователей.
После установки confirmed_at
атрибута на заводе все тесты пройдены.