1

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

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

正如我所说,索引方法是唯一有这个问题的方法。我已经尝试了所有我能想到的东西,包括添加My::Application.default_url_options = {:format => "html"}application.rb (除非我需要从控制器执行 redirect_to ,否则我很茫然。该应用程序使用 Thin 作为 Apache 1.3 后面的应用程序服务器(很遗憾,我无法更改,这似乎不是问题,因为直接访问 Thin 服务器会导致同样的问题)。任何想法将不胜感激。

4

1 回答 1

0

因此,答案似乎是,如果 URL 未指定 .html 扩展名,则应用程序将提供与控制器同名的资产(来自资产管道),至少在开发环境中运行时是这样。一旦我删除了从资产文件夹创建控制器时自动生成的 [controllername].css.scss 和 [controllername].js.coffee 文件(这两个文件都未使用),应用程序就可以正常工作。只是为了好玩,我尝试让它们进入并运行rake assets:precompile,但这种行为一直存在,直到文件被实际删除。这似乎仍然违反直觉,我正在考虑将此作为错误提交。

于 2012-12-05T15:58:00.320 回答