2011-02-24 47 views
6

我正在運行一個RoR應用程序(rails 2.3.8,ruby 1.8.7),該應用程序在我的本地機器上運行良好。但對生產的日誌顯示以下錯誤:ActionView :: TemplateError(缺少模板)在軌道上的紅寶石

ActionView::TemplateError (Missing template folder/_file_name.erb in view path app/views) on line #19 of app/views/layouts/main.rhtml: 
19:  <%= render :partial => "folder/file_name" -%> 

文件名存在作爲folder/_file_name.html.erb,我試圖重現對生產環境的問題,但沒有任何運氣,出於某種原因Rails應用程序在一些詢問folder/_file_name.erb而其他時候它會搜索正確的文件folder/_file_name.html.erb

有人可以向我解釋發生了什麼事嗎?

同樣也會發生.rhtml文件裏,Rails應用程序的請求有時.erb而其他人得到正確的.rhtml文件

更新:

<%= render :partial => "shared/meta_tags" -%> 
<%= render :partial => "shared/common_resources" -%> 
<%= render :partial => 'shared/ads/oas' -%> 

在這個問題上的任何指針將有幫助, 在此先感謝

+0

請顯示代碼引用你的部分。聽起來就像那裏有問題。 – Dty 2011-02-24 09:51:38

回答

4

什麼是請求的格式?,對於第一個模板(folder/_file_name.html.erb)它只會是正確的如果請求格式爲html,但不是,如果它是ajax或您的應用中有任何其他自定義類型。一個快速解決方案是將其重命名爲folder/_file_name.erb如果您想要對所有格式使用相同的部分

+0

所有文件都通過http請求請求xhr,我有超過100個文件需要重命名。它也會導致其他一些問題,所以如果沒有其他辦法,我將在辦公室某個時間註定失敗。 – wael34218 2011-02-24 10:07:55

+0

Hah true ...以及確保在日誌中發現錯誤時,請求在第一行中有'AS HTML'。還包括渲染該部分的代碼將有助於丟棄任何其他可能性 – 2011-02-24 10:11:12

+0

可能會在xhr請求上發生錯誤,該錯誤會嘗試渲染呈現某些部分的錯誤頁面。 – wael34218 2011-02-25 13:22:39

5

是否存在與該文件具有相同名稱的控制器操作?

如果你有一個foo控制器,並且在你的動作中沒有定義響應,Rails會嘗試渲染view/foo/bar.html.erb。

如果這不是你想要的,你需要定義你的控制器的響應,並告訴Rails呈現適當的部分,像這樣:

respond_to do |format| 
    format.html do 
     render :partial => "/foo/bar" 
    end 
end 

在後一種情況下,Rails會呈現「的意見/富/ _bar.html.erb」

3

在某些情況下,因爲有像失蹤緩存,未知的請求格式和負載等原因不能防止這種錯誤

您可以嘗試限制的預定義的格式數量如:

get '/about-us' => 'controller#about', :format => /(?:|html|json)/ 

然而,我在application_controller.rb文件添加下面的方法,使這樣的錯誤會呈現一個404頁,而在屏幕上有錯誤消息未能

rescue_from ActionView::MissingTemplate, :with => :rescue_not_found 
protected 
def rescue_not_found 
    Rails.logger.warn "Redirect to 404, Error: ActionView::MissingTemplate" 
    redirect_to '/404' #or your 404 page 
end 

你可以用在這個代碼如果聲明,如if Rails.env.production?這樣的事情,因爲env設置,所以你的開發環境不會受到影響