2012-12-05 120 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,但行爲持續到文件實際刪除。這看起來似乎違反直覺,我正在考慮將此作爲一個錯誤提交。