2012-12-05 123 views
1

我正在编写一个简单的Rails3应用程序,该应用程序运行在一个子网址中,除了一个问题外,它运行良好。如果我没有在任何控制器的“索引”方法的URL末尾添加“.html”扩展名,请求将返回空白页。无论我要求哪个控制器,“索引”方法总是返回完全空,包括如果我卷曲的URL。我在每个控制器中都有一个“index.html.erb”文件,它具有简单但完整的HTML,如果我在URL中包含“.html”扩展名,一切正常。下面是一些例子URL及其结果:Rails3无法正确呈现页面

http://my.application.url/appname/pages -- returns a blank page. 
http://my.application.url/appname/pages.html -- returns the correct HTML page 
http://my.application.url/appname/pages/new -- returns the correct HTML form 
http://my.application.url/appname/pages/1 -- returns the correct HTML page 
http://my.application.url/appname/pages/1/edit -- returns the correct HTML form 

我的路线文件看起来与此类似:

My::Application.routes.draw do 
    scope "/appname" do 
    resources :posts 
    resources :pages 
    root :to => 'home#index' 
    end 
end 

我控制器适用部分类似于这样:

class PagesController < ApplicationController 
    def index 
    @pages = Page.all 
    respond_to do |format| 
     format.html 
    end 
    end 
... 
end 

由于我说,索引方法是唯一有这个问题的方法。我尝试了所有我能想到的方法,包括在application.rb中添加My::Application.default_url_options = {:format => "html"}(除了当我需要从控制器执行redirect_to时工作),并且我无所适从。该应用程序使用Thin作为应用服务器,后者在Apache 1.3后面进行代理(我不幸地无法更改,因为直接点击Thin服务器导致同样的问题,这似乎并不是问题)。任何想法将不胜感激。

+1

刚刚确认问题不是细。 Webrick中存在同样的问题 – user1877592

+0

不完全是答案(更多的解决方法),但是从资产管道中删除我的[controllername] .css.scss文件解决了问题。我已经使用Rails很多年了,但不幸的是我还不完全熟悉Rails 3中新的资产管道。这种行为似乎很奇怪,对我来说也有点不直观,就好像“约定配置”范式被稀释了一样。 – user1877592

回答

0

所以,答案似乎是,如果URL没有指定.html扩展名,那么应用程序将在控制器中输出与资源管道同名的资产(至少在开发过程中运行时)环境。一旦我从资产文件夹创建控制器时自动生成的[controllername] .css.scss和[controllername] .js.coffee文件(无论如何都是未使用的),应用程序都能正常工作。只是踢,我试图让他们进入并运行rake assets:precompile,但行为持续到文件实际删除。这看起来似乎违反直觉,我正在考虑将此作为一个错误提交。