2011-02-05 28 views
8

Rails My 3 trang web đang bị ảnh hưởng bởi crawlers với kỳ lạ chấp nhận tiêu đề, trường hợp ngoại lệ kích hoạt như nhưRails 3 và Strange Chấp nhận Headers

ActionView::MissingTemplate occurred in home#show 

Dưới đây là một số các tiêu đề chấp nhận gây ra các vấn đề

text/* 
application/jxw 
*/*;q=0.1 

Trong những trường hợp này, điều này đang được hiểu là định dạng cho yêu cầu và như vậy, gây ra lỗi mẫu bị thiếu. Tôi không thực sự quan tâm đến những gì tôi quay trở lại với những trình thu thập thông tin này, nhưng chỉ muốn tránh những ngoại lệ.

+0

Điều này dường như được giải quyết trong Rails 3.1. Thảo luận tại đây: https://github.com/rails/rails/issues/701 – tee

Trả lời

7

Bạn có thể giải cứu từ ngoại lệ như thế này trong bộ điều khiển ứng dụng của bạn và đưa ra các mẫu HTML thay vì:

class ApplicationController 
    rescue_from ActionView::MissingTemplate, :with => :render_html 

    def render_html 
    if not request.format == "html" and Rails.env.production? 
     render :format => "html" 
    else 
     raise ActionView::MissingTemplate 
    end 
    end 
end 
+1

Đợi cái gì? 'not request.format ==" html "'? Ý của bạn là 'request.format! =" Html "? –

+0

Có cách nào tốt để đưa ra yêu cầu trong môi trường địa phương của tôi để mô phỏng vấn đề được đề cập không? Tôi muốn thử cách khắc phục này nhưng tôi muốn có thể đảm bảo nó hoạt động cho chúng tôi trước khi triển khai nó để sản xuất. – blim8183

+1

curl -H 'Chấp nhận: image/jpeg' http: // localhost: 3000/youraction – todd

1

Vì SO ngăn chặn thêm nhận xét cho đến khi tôi có 50 danh tiếng, tôi phải gửi câu trả lời mới để trả lời câu hỏi của Ryan Bigg trong các nhận xét.

not request.format == "html" nhiều hơn hoặc ít hơn giống như request.format != "html". and, ornot hợp lý giống hệt với &&, ||! - tuy nhiên, chúng có mức ưu tiên thấp hơn nhiều. Vì vậy, trong ví dụ này, toán tử == đánh giá trước toán tử not, sao cho nó tạo ra kết quả giống như sử dụng !=.

+1

Chắc chắn, nhưng Ryan rất có thể có nghĩa là cách mà 'không foo == bar' được tạo từ làm cho việc phân tích cú pháp (đối với con người) khó hơn nhiều so với' foo! = bar'. –

Các vấn đề liên quan