Phusion Passenger - 路线存在但不匹配(代替404)

时间:2011-07-13 16:08:03

标签: ruby-on-rails-3 routes passenger apache-config

我在一个错误的乘客环境(CentOS,apache)的根级运行一个rails 3应用程序,并且很难让乘客找到一些路线,尽管rake routes正确地显示了路线。在开发过程中一切正常(即使用rails server代替apache中的phusion乘客)。

我的应用程序的管理部分带有登录页面。应用程序的主要部分有效,但管理部分下的所有内容都无法访问,因为我得到的是404而不是登录页面(当我禁用登录时,可以访问管理页面)。我的apache配置是

<VirtualHost *:80>
  ServerName foo.bar.com
  DocumentRoot /var/www/apps/myapp/current/public
  <Directory /var/www/apps/myapp/current/public>
    Allow from all
    Options -MultiViews
  </Directory>
</VirtualHost>

我的登录过程在管理员控制器中实现为before_filter:

class Admin::AdminController < ApplicationController

  # login disabled for testing
  before_filter :require_login

  def require_login
    @current_user ||= User.find_by_id(session[:user_id])
    redirect_to admin_login_path unless @current_user
  end
end

我的路线档案有

Mpf::Application.routes.draw do
  secure_protocol = "https://"
  ...
  namespace "admin" do
    ...
    match "login" => "user_sessions#new", :as => :login, :constraints => { :protocol => secure_protocol }
    ...    
  end
  ...
end

当我运行rake路线时,我得到了

admin_login        /admin/login(.:format)      {:protocol=>"http://", :action=>"new", :controller=>"admin/user_sessions"}

但是当我尝试访问http://foo.bar.com/admin时,我得到了404并且日志显示

Started GET "/admin/login" for iii.iii.iii.iii at 2011-07-13 07:20:41 -0400
ActionController::RoutingError (No route matches "/admin/login"):

据我所知,它应该起作用......除了事实并非如此。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您是否尝试使用https://进行访问?您似乎提供了限制来阻止来自http://的访问以及您发布的引用http://的链接。