2011-05-10 71 views
15

我有,供应我的主页的操作。正常访问时(通过在Web浏览器的用户IE)它工作正常,但是当通过特定的网络爬虫访问,它引发以下错误:ActionView :: MissingTemplate错误,只有当被Bot访问时?

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/[email protected]/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文件,并把一些乱码在它的唯一途径?或者我可以更优雅地解决这个问题吗?

+0

你可以发布你的控制器代码,特别是'索引'操作吗?这应该很容易在一分钟内解开,以便理清Rail的格式服务自动驾驶。 – nessur 2011-05-10 14:17:37

回答

7

我已经看到这些孩子的。你可以使用一些中间件来重写这些请求:

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的搜索请求,这似乎是有意义的这个中间件添加进去。

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

+0

把它作为Rack中间件解决这个问题绝对有意义。 – 2011-09-19 21:17:27

0

原来这组特定的僵尸都如磐石哑,而忽略任何形式要求的格式,因为我试图做。我最终在我的robots.txt中禁止了这些漫游器的用户代理。没有更多的错误。但是,如果有人有更优雅的解决方案,请将其张贴出来,我会将其标记为已接受的答案,否则,我会在几天内接受此答案。

+0

你有没有找到一个体面的解决方案,LinkedInBot在这里抛出这些例外。 – Vinozio 2014-06-13 11:55:10

相关问题