Несоответствие маршрутизации между средами разработки и производства (Ruby on Rails)

#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’) условие аутентификации, которое проверяло статус уровня администратора. ЭТО условие перенаправляло на домашнюю страницу, если текущий пользователь не был администратором.

Тестовый пользователь, которого я создал в своей среде разработки, ЯВЛЯЕТСЯ администратором (поскольку я создал этого пользователя перед переключением области видимости), в то время как тестовый пользователь, которого я создал в производственной среде, НЕ является администратором (отсюда перенаправление).

Спасибо всем за вашу помощь! Хотя эта ошибка была оплошностью, ваши предложения рассказали мне о нескольких новых инструментах диагностики, которые я не думал использовать.