2011-02-24 62 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设置,所以你的开发环境不会受到影响