当前位置:  开发笔记 > 后端 > 正文

ActionView :: MissingTemplate错误,仅在Bot访问时?

如何解决《ActionView::MissingTemplate错误,仅在Bot访问时?》经验,为你挑选了1个好方法。

我有一个为我的主页提供服务的动作.它在正常访问时(即通过Web浏览器中的用户)工作正常,但是当由特定Web爬网程序访问时,它会引发以下错误:

 A ActionView::MissingTemplate occurred in tags#promoted:

 Missing template tags/promoted with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>["text/*"], :locale=>[:en, :en]} in view paths "/Apps/accounts/app/views", "/usr/local/rvm/gems/ruby-1.9.2-p180@accounts/gems/devise-1.3.0/app/views"
 actionpack (3.0.4) lib/action_view/paths.rb:15:in `find'

似乎机器人正在尝试获取text/*格式,没有模板,这是有道理的,所以我尝试在我的行动中执行以下操作:

  def promoted
   request.format = :html #force html to avoid causing missing template errors
   # more action stuff....
  end

本质上,我试图强制请求的格式为HTML,因此它提供html模板.

然而,每次这些机器人请求此页面时,都会发生丢失的模板错误.

这不是什么大不了的事,但理想情况下我想解决这个错误,如果只是这样我就不再从我的应用程序中收到这些错误电子邮件了.

是唯一的方法来调用文件my_action.text.erb并在其中添加一些乱码吗?或者我可以更优雅地解决这个问题吗?



1> Jeff Wigal..:

我也一直在看这些.您可以使用一些中间件来重写这些请求:

class Bot
  def initialize(app)
    @app = app
  end

  def call(env)
    h = env["HTTP_ACCEPT"]
    env["HTTP_ACCEPT"] = "text/html" if h == "text/*"
    @app.call(env)
  end
end

我为了消除一些MS Office Discovery请求而分叉了一个gem,并且将这个中间件添加到其中似乎是有意义的.

https://github.com/jwigal/rack-options-request

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有