间歇性Ruby on Rails日志(ActionView :: MissingTemplate)

时间:2014-09-22 07:09:52

标签: ruby-on-rails ruby

我一直在看日志中的错误,类似于下面的内容。

任何人都可以建议我为什么间歇性地犯这样的错误?这是一个缓存问题吗?

每当我尝试加载about-us页面时,它都会完美加载,但每隔几天我的日志中就会出现这样的错误,但它并不局限于单个页面。有时它是主页,有时是其他页面。

Started GET "/about-us" for xxx.xxx.xxx.xxx at 2014-08-16 07:54:06 +0100
Processing by PagesController#about as */*;q=0.6
Geokit is using the domain: mydomain.com
[1m[35mPage Load (0.2ms)[0m  SELECT `pages`.* FROM `pages` WHERE `pages`.`name` = 'About Us' LIMIT 1
Completed 500 Internal Server Error in 2ms

ActionView::MissingTemplate (Missing template pages/about, application/about with {:handlers=>[:erb, :builder, :arb], :formats=>["*/*;q=0.6"], :locale=>[:en, :en]}. Searched in:
* "/var/www/myapp/releases/201408150651/app/views"
* "/var/lib/ruby-rvm/gems/ruby-1.9.2-p320/gems/activeadmin-0.3.2/app/views"
* "/var/lib/ruby-rvm/gems/ruby-1.9.2-p320/gems/kaminari-0.12.4/app/views"
* "/var/lib/ruby-rvm/gems/ruby-1.9.2-p320/gems/devise-1.4.7/app/views"
):

这个问题类似于:Random rails ActionView::MissingTemplate errors所以这种情况发生在其他人身上,但那里也没有明确的答案。

2 个答案:

答案 0 :(得分:1)

由于存在负载原因(例如您提到缺少缓存,未知请求格式等),您无法阻止此错误

您可以尝试限制预定义格式的数量,例如:

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

您也可以禁止此异常。在 config / initializers 目录中创建一个新文件(例如 exception_handler.rb ),并将此行添加到创建的文件中:

ActionDispatch::ExceptionWrapper.rescue_responses.merge! 'ActionView::MissingTemplate' => :not_found

希望它有所帮助。

答案 1 :(得分:0)

@ProblemSolvers是一种可能的解决方案。但是,我在我的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?,因为env已经设置好了你的开发环境不会受到影响