Rails 3 поддомен - PullRequest
       38

Rails 3 поддомен

0 голосов
/ 09 февраля 2011

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

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

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

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

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

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

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

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

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

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

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

Мысли высоко ценятся.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2011

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

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

0 голосов
/ 09 февраля 2011

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

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

Ваш корневой URL-адрес - UsersController # index:

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

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

...