Поддомен Rails 3

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

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

маршруты.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#create, not_authorized) работают так, как ожидалось для anon. Пользователь
  • приложение работает как положено на моей рабочей станции

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

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

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

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

Похоже, это проблема маршрутизации, связанная с поддоменом, но я не уверен.

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

теперь кажется, что аутентифицированный пользователь не создается и не сохраняется и, следовательно, перенаправляется обратно к действию UserSession#new (путь аутентификации 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:sessions:create), выполнил миграцию ($ rake db:migrate), перезапустил Apache ($ touch tmp/restart.txt), очистил кеш браузера, затем перезапустил браузер.

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

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

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


person craig    schedule 09.02.2011    source источник


Ответы (2)


Для начинающих…

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

Ваш корневой URL — UsersController#index:

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

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

person coreyward    schedule 09.02.2011
comment
Наверное, я невнимательно читал журнал - отредактировал пост. Как мне установить куки в бета-домен (он должен отличаться от того, что я делаю сейчас)? Успешная аутентификация направляет на «root_url». Вы предлагаете, чтобы вместо этого он направлялся к users_path, верно? - person craig; 09.02.2011
comment
настроил session_store.rb как MyApp::Application.config.session_store :cookie_store, :key =› '_MyApp_session', :domain =› :all Перезапущен. Без изменений. - person craig; 09.02.2011

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

Теперь, если бы я только мог определить, что это за "что-то" было...

person craig    schedule 10.02.2011