6

我正在运行一个 RoR 应用程序(rails 2.3.8,ruby 1.8.7),该应用程序在我的本地机器上运行良好。但在生产中,日志显示以下错误:

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' -%>

有关此问题的任何指示都会有所帮助,在此先感谢

4

3 回答 3

6

folder/_file_name.html.erb请求的格式是什么?对于第一个模板(folder/_file_name.erb如果您想对所有格式使用相同的部分,一种快速的解决方案是将其重命名为

于 2011-02-24T09:53:24.703 回答
5

是否有与该文件同名的控制器操作?

如果你有一个带有 bar 动作的 foo 控制器并且在你的动作中没有定义响应,Rails 将尝试渲染 views/foo/bar.html.erb。

如果这不是您想要的,您需要在控制器中定义一个响应并告诉 Rails 呈现适当的部分,如下所示:

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

在后一种情况下,Rails 将呈现“views/foo/_bar.html.erb”

于 2011-02-24T18:41:43.340 回答
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 语句中,if Rails.env.production?鉴于已设置环境,因此您的开发环境不会受到影响。

于 2015-09-15T22:07:22.963 回答