Я запускаю приложение направляющих на 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 среду, чтобы сделать это (или не забота об этом)?
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
С уважением