Разверните приложение для направляющих на некорневом контексте - restful_auth не работа

Я запускаю приложение направляющих на http://www.naildrivin5.com/scalatour. Это хорошо работает. Когда я вхожу в систему использования приложения restful_authentication, Я взят на http://www.naildrivin5.com вместо приложения. Странный.

Это кажется, что я неправильно сконфигурировал что-то. Далее, существует несколько мест, где я - создание руки некоторые URL, и мне нужен доступ к "корню контекста приложения" (т.е. scalatour в моем случае) для формирования URL правильно. Я закончил тем, что бросил его в свою конфигурацию, но это просто кажется неправильным.

Apache, с Пассажиром, запуская приложение направляющих:

Apache conf:

 
  DocumentRoot /somewhere/naildrivin5.com/html
  ServerName naildrivin5.com 
  RailsBaseURI /scalatour  
  PassengerPoolIdleTime 5 
  # other things not related

passenger.conf:

LoadModule passenger_module /usr/share/passenger/ext/apache2/mod_passenger.so 
PassengerRoot /usr/share/passenger 
PassengerRuby /usr/bin/ruby 
PassengerLogLevel 2 

/somewhere/naildrivin5.com/html/scalatour symlinked к моему приложению для направляющих public папка.

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

Как должен/могут, я настраиваю это, как я могу получить доступ к этому во времени выполнения, и как я могу лучше всего настроить свою локальную dev среду, чтобы сделать это (или не забота об этом)?

5
задан davetron5000 2 February 2010 в 00:40
поделиться

1 ответ

Краткий ответ

  • настройка relative_url_root в environment / production.rb
  • создание маршрута под названием «домой» к моей домашней странице
  • Изменение скаффолда restful_authentication код для перенаправления на главную вместо /

Подробности

Если у вас проблемы из-за конфигурации suburi, вам следует настроить relative_url_root в вашей среде / production.rb file:

config.action_controller.relative_url_root = "/scalatour"

На мой взгляд, проблема, которую вы здесь описываете, связана с контроллером / маршрутами, и возможное решение может быть следующим:

1) Я бы настроил эти маршруты:

ActionController::Routing::Routes.draw do |map|
  [...]
  map.home 'home', :controller => 'welcome', :action => 'show'

  map.login "login", :controller => "user_sessions", :action => "new"

  map.logout "logout", :controller => "user_sessions", :action => "destroy"

  map.root :login
end

2) Тогда контроллер UserSessions будет выглядит так:

class UserSessionsController < ApplicationController
  before_filter :require_no_user, :only => [:new, :create]
  before_filter :require_user, :only => :destroy

  def new
    @user_session = UserSession.new
  end

  def create
    @user_session = UserSession.new(params[:user_session])
    if @user_session.save
      redirect_back_or_default home_path
    else
      flash[:error] = "Sorry, unrecognized username or password."
      render :action => :new
    end
  end

  def destroy
    current_user_session.destroy
    redirect_back_or_default login_url
    reset_session()
  end
  end

3) Для полноты картины методы require_user и require_no_user могут быть помещены в ApplicationController и будут выглядеть так:

  def require_user
    unless current_user
      flash[:error] = t("You must be logged-in to access this page")
      redirect_to login_path
      return false
    end
  end

  def require_no_user
    if current_user
      redirect_to home_path
      return false
    end
  end

С уважением

4
ответ дан 15 December 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: