#ruby-on-rails #ruby-on-rails-3
#ruby-on-rails #ruby-on-rails-3
Вопрос:
Я пишу приложение на Rails (версия v3.0.5), которое я развертываю в Heroku.
Когда я посещаю http://localhost:3000/places/new в моей среде разработки я попадаю на соответствующую страницу (форма для создания нового места). Все работает, как ожидалось (я могу создавать новые места).
Когда я пытаюсь посетить соответствующую страницу (http://example.heroku.com/places/new ) в моей производственной среде Heroku я перенаправляюсь обратно на домашнюю страницу моего приложения.
Содержимое моего файла routes.db:
ExampleSite::Application.routes.draw do
resources :users
resources :sessions, :only => [:new, :create, :destroy]
resources :places
root :to => 'pages#home'
match '/contact', :to -> 'pages#contact'
match '/about', :to -> 'pages#about'
match '/signin', :to -> 'sessions#new'
match '/signout', :to -> 'sessions#destroy'
end
Что может быть причиной несоответствия между разработкой и производством?
Примечание: единственными действиями, которые я до сих пор реализовал в моем контроллере «places», являются «new» и «create» (оба из которых выполняются так, как ожидалось в среде разработки). Не уверен, что это должно быть актуально, но имейте это в виду. Кроме того, все действия и маршруты «пользователей», похоже, работают должным образом как при разработке, так и при производстве.
РЕДАКТИРОВАТЬ: Как отмечено в комментарии ниже, /places /new — это страница, защищенная аутентификацией, но в обоих случаях я пытаюсь сделать это во время входа в систему. Кроме того, когда я пытаюсь получить доступ к / places / new в своей производственной среде, не войдя в систему, соответствующее перенаправление (на мою страницу / signin) работает должным образом.
Мой журнал Heroku из-за попытки получить / разместить / новый:
2011-05-12T23:37:30 00:00 app[web.1]: Started GET "/places/new" for 74.87.126.82 at Thu May 12 16:37:30 -0700 2011
2011-05-12T23:37:30 00:00 app[web.1]: Processing by PlacesController#new as HTML
2011-05-12T23:37:30 00:00 app[web.1]: Redirected to http://example.heroku.com/
2011-05-12T23:37:30 00:00 app[web.1]: Completed 302 Found in 4ms
2011-05-12T23:37:30 00:00 heroku[router]: GET example.heroku.com/places/new dyno=web.1 queue=0 wait=0ms service=9ms bytes=631
2011-05-12T23:37:30 00:00 app[web.1]:
2011-05-12T23:37:30 00:00 app[web.1]:
2011-05-12T23:37:30 00:00 app[web.1]: Started GET "/" for 74.87.126.82 at Thu May 12 16:37:30 -0700 2011
2011-05-12T23:37:30 00:00 app[web.1]: Processing by PagesController#home as HTML
2011-05-12T23:37:30 00:00 app[web.1]: Rendered layouts/_header.html.erb (4.3ms)
2011-05-12T23:37:30 00:00 app[web.1]: Rendered pages/home.html.erb within layouts/application (5.7ms)
2011-05-12T23:37:30 00:00 app[web.1]: Completed 200 OK in 7ms (Views: 3.5ms | ActiveRecord: 5.8ms)
2011-05-12T23:37:30 00:00 heroku[router]: GET example.heroku.com/ dyno=web.1 queue=0 wait=0ms service=14ms bytes=2357
Комментарии:
1. есть ли у вас какая-либо проверка подлинности, которая может завершиться ошибкой и перенаправить вас обратно на домашнюю страницу?
2. Существует аутентификация, но в обоих случаях я пытаюсь выполнить это во время входа в систему. Кроме того, мой session-checker настроен на перенаправление на страницу / signin (sessions #new) и выдает флэш-сообщение «Пожалуйста, войдите» (ни то, ни другое в данном случае не происходит).
3. Я только что попытался получить доступ к / places / new в производственной среде, не войдя в систему, и перенаправление аутентификации (описанное в моем последнем комментарии) сработало, как ожидалось.
4. Вы случайно не используете Cancan?
5. @twmills Я не слышал о Cancan, и его нет в моем Gemfile.
Ответ №1:
Как оказалось, у меня было второе (забытое, поскольку я изменил область действия ‘users’) условие аутентификации, которое проверяло статус уровня администратора. ЭТО условие перенаправляло на домашнюю страницу, если текущий пользователь не был администратором.
Тестовый пользователь, которого я создал в своей среде разработки, ЯВЛЯЕТСЯ администратором (поскольку я создал этого пользователя перед переключением области видимости), в то время как тестовый пользователь, которого я создал в производственной среде, НЕ является администратором (отсюда перенаправление).
Спасибо всем за вашу помощь! Хотя эта ошибка была оплошностью, ваши предложения рассказали мне о нескольких новых инструментах диагностики, которые я не думал использовать.