我有一个行动,服务我的主页.当正常访问(即通过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'
看来,机器人正在尝试获取文本/ *格式,没有模板,这是有道理的,所以我尝试在我的操作中执行以下操作:
def promoted request.format = :html #force html to avoid causing missing template errors # more action stuff.... end
实质上,我试图强制请求的格式为html,所以它服务于HTML模板.
解决方法
我也看过这些.您可以使用一些中间件来重写这些请求:
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发现请求,似乎把这个中间件添加进去是有意义的.