2011-05-10 2 views
15

나는 나의 홈페이지를 위해 행동한다. (웹 브라우저에서 사용자 즉) 일반적으로 방문했을 때 그것은 잘 작동하지만 특정 웹 크롤러가 방문했을 때, 그것은 다음과 같은 오류가 발생합니다 :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

컨트롤러 코드와 특히 '색인'작업을 게시 할 수 있습니까? 이것은 레일의 포맷 서비스 자동 조종을 분류하기 위해 1 분 안에 쉽게 풀 수 있어야합니다. – nessur

답변

7

나는 이것들을 또한 보았습니다. 좀 MS 오피스 검색 요청을 살해 보석을 포크

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 

, 그리고 그것으로이 미들웨어를 추가 할 수 이해 듯 : 당신은 이러한 요청을 다시 작성하는 몇 가지 미들웨어를 사용할 수 있습니다.

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

+0

랙 미들웨어로서이를 해결하는 것이 타당합니다. –

0

이 봇 세트는 바위처럼 바보 같고 내가하려는 것처럼 요청 형식을 무시합니다. 내 robots.txt에서 이러한 봇 '사용자 에이전트를 허용하지 않게되었습니다. 더 이상 오류가 없습니다. 그러나 누군가가 좀 더 우아한 해결책을 가지고 있다면, 그것을 게시하십시오. 나는 그것을 받아 들인 대답으로 표시 할 것입니다, 그렇지 않으면, 나는 이틀 안에 이것을 받아 들일 것입니다.

+0

괜찮은 해결책을 찾았습니까? LinkedInBot이 여기에 예외를 던지고 있습니다. – Vinozio