我在http://www.naildrivin5.com/scalatour上运行了一个rails应用程序。它工作正常。当我使用restful_authentication
登录应用时,我会转到http://www.naildrivin5.com而不是应用。奇怪的。
这似乎是我错误配置了一些东西。此外,还有一些我正在手工创建一些网址的地方,我需要访问“应用程序上下文根”(即我的情况下为scalatour
)以正确形成URL。我最终把它扔进了我的配置中,但这似乎不对。
Apache,使用Passenger,运行Rails应用程序:
Apache conf:
<VirtualHost 69.89.3.135:80>
DocumentRoot /somewhere/naildrivin5.com/html
ServerName naildrivin5.com
RailsBaseURI /scalatour
PassengerPoolIdleTime 5
# other things not related
</VirtualHost>
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
符号链接到我的Rails应用的public
文件夹。
使用restful_authentication
,该应用可以正常运行,除了进行身份验证。登录后,我被带到了Web服务器根目录,而不是应用程序根目录。
我应该如何/可以配置它,如何在运行时访问它,以及如何最好地配置我的本地开发环境来执行此操作(或不关心它)?
答案 0 :(得分:4)
relative_url_root
environments/production.rb
restful_authentication
代码以重定向到主页,而不是/
如果您因suburi配置而遇到麻烦,则应在environment / production.rb文件中配置relative_url_root:
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
祝你好运