0

Я хотел бы опубликовать свое приложение для выбранного набора лиц для частной бета-версии. Я создал поддомен для этой задачи: beta.company.com.Rails 3 subdomain

Приложение работает как ожидалось на моей рабочей станции, но когда я нажимаю его на сервер, приложение постоянно направляет обратно на страницу аутентификации. FYI, я использую declarative-authorization, authlogic и Passenger.

routes.rb:

#Application controller 
    match "/not_authorized", :to => "application#not_authorized", :as => :not_authorized 

    #UserSessions controller 
    match "/quit", :to => "user_sessions#destroy", :as => :quit 
    match "/authenticate", :to => "user_sessions#new", :as => :authenticate 
    resources :user_sessions, :only => :create 

    #Users controller 
    match "/enroll", :to => "users#new", :as => :enroll 

    # root url 
    root :to => "users#index" 

Симптомы:

  • анонимные маршруты (например, user_sessions # создать, not_authorized) работают как и ожидалось Anon. Пользователь
  • приложение работает, как ожидалось на моей рабочей станции

Когда я смотрю на production.log, я вижу запись как:

Обработка по UsersController # индекс как HTML Разрешение отказано: Не найдено совпадающих правил для индекса для # @role_symbols = [: guest]> (роли [: guest], privileges [: index,: read,: manage], context: users). перенаправлено в http://beta.company.com/authenticate

** редактировать **

С одной стороны, нет UsersController # индекс действия, и если был, то анонимный пользователь не будет иметь к нему доступ. Я смущен тем, почему он пытается направить туда вообще (вместо корневого URL-адреса, где он должен идти после успешной проверки подлинности).

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

перечитать эту «ошибку» более внимательно. есть действие индекса UserController # И анонимный пользователь НЕ должен иметь к нему доступ. на первый взгляд, я подумал, что он читает индекс UserSessionController #, который является действием, которого не существует.

сейчас кажется, что аутентифицированный пользователь не создается и не сохраняется и, следовательно, перенаправляется обратно на новое действие UserSession # (путь аутентификации AKA).

**/** редактировать

** редактировать II **

Я изменился с cookie_store до active_record_store:

# cookie store 
# MyApp::Application.config.session_store :cookie_store, :key => '_myApp_session' 
# active-record store 
MyApp::Application.config.session_store :active_record_store 

Добавлена ​​таблица ($ рейка ДБ: сессии: создать) , выполнил миграцию ($ rake db: migrate), перезапустил Apache ($ touch tmp/restart.txt), очистил кеш браузера и перезапустил браузер.

Сессия была успешно добавлена ​​в таблицу сеансов, но у меня все еще возникает проблема.

**/редактировать II **

Мысли очень ценятся.

ответ

0

Проблема была связана с оператором SELECT в контроллере. Чувствительность к регистру имени таблицы в инструкции SELECT, «SELECT Users. *», Вызывала ошибку. По какой-то причине эта ошибка не включалась в файл production.log. Последующее развертывание, не использующее Capistrano, делало что-то (я до сих пор не знаю), чтобы включить эту ошибку в файл production.log.

Теперь, если я мог бы просто определить, что это «что-то» было ...

0

Для начала ...

С одной стороны, нет UsersController # индекс действия, и если был, то анонимный пользователь не будет иметь к нему доступ. Я смущен тем, почему он пытается направить туда вообще (вместо корневого URL-адреса, где он должен идти после успешной проверки подлинности).

Корневой URL является UsersController # индекс:

# root url 
root :to => "users#index" 

Проверьте, чтобы убедиться, что вы устанавливаете куки на бета домена. Возможно, вы перенаправляете или устанавливаете ссылки, которые используют полный URL (а не только путь, так что user_url(@user) против user_path(@user)), что приведет к тому, что вы направитесь прямо в корневой домен.

+0

Я предполагаю, что я не читал журнал достаточно близко - отредактированный пост. Как установить cookie в бета-домене (должен отличаться от того, что я делаю сейчас)? Успешная аутентификация делает маршрут «root_url». Вы предполагаете, что вместо этого он направляется к user_path, правильно? – craig

+0

настроил session_store.rb как MyApp :: Application.config.session_store: cookie_store,: key => '_MyApp_session',: domain =>: all Restarted. Без изменений. – craig