2011-05-10 29 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

相關問題