我正在编写一个在子URL中运行的简单Rails3应用程序,除了一个问题外,它运行良好。如果我没有在任何控制器的“索引”方法的URL末尾添加“.html”扩展名,请求将返回一个空白页面。我请求哪个控制器无关紧要,“index”方法总是返回完全为空,包括我卷曲URL。我在每个控制器中都有一个“index.html.erb”文件,包含简单但完整的HTML,如果我在URL中包含“.html”扩展名,一切正常。以下是一些示例网址及其结果:
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服务器会导致同样的问题)。任何想法都会非常感激。
答案 0 :(得分:0)
所以,答案似乎是如果URL没有指定.html扩展名,那么应用程序将提供与控制器同名的资产(来自资产管道),至少在开发环境中运行时。一旦我删除了[controllername] .css.scss和[controllername] .js.coffee文件(两者都未使用),这些文件是我从assets文件夹创建控制器时自动生成的,应用程序正常工作。只是为了踢,我尝试将它们留在并运行rake assets:precompile
,但行为一直存在,直到文件被实际删除。这似乎违反直觉,我正在考虑将此归为一个错误。