缺少Ruby on Rails项目上的模板博客/索引

pup*_*eno 15 ruby-on-rails

对于我的一个项目,我偶尔得到这个例外:

ActionView :: MissingTemplate:缺少模板博客/索引{:handlers => [:rxml,:erb,:builder,:rjs,:haml,:rhtml],:formats => ["image/jpeg","image/pjpeg","image/png","image/gif"],:locale => [:en,:en]}在视图路径"/ var/www/keeponposting/releases/20110403083651/app/views"

似乎有人从不是图像的URL请求图像:

HTTP_ACCEPT"image/jpeg,image/pjpeg,image/png,image/gif"

有什么想法可以做些什么吗?我是否必须为其中一个实现处理程序并返回""以消除此异常或是否有更好的方法来处理它?

现在我也得到了这个:

ActionView :: MissingTemplate:缺少模板博客/索引{:formats => ["text/*"],:handlers => [:rjs,:haml,:rhtml,:erb,:rxml,:builder],:locale => [:en,:en]}在视图路径"/ var/www/keeponposting/releases/20110415040109/app/views"

无论请求的格式是什么,都没有办法发回HTML?

Pab*_*zzi 13

我同意阻止有问题的机器人,但如果你真的想强制响应格式添加before_filter和设置request.format = :html,如下所示:

before_filter :force_request_format_to_html

private

def force_request_format_to_html
  request.format = :html
end
Run Code Online (Sandbox Code Playgroud)


Hen*_*k N 8

我用这个新的Rails 3.1选项修复了这个问题(几分钟前 - 到目前为止,这么好):

config.action_dispatch.ignore_accept_header = true
Run Code Online (Sandbox Code Playgroud)

本Rails问题所述.那就是config/application.rb.

我在RSpec请求测试(使用Capybara)中测试了它:

it "should not break with HTTP_ACCEPT image/*;w=320;h=420 from iPhone" do
  page.driver.header "Accept", "image/*;w=320;h=420"
  visit "/some/path"
  page.should have_content("Some content")
end
Run Code Online (Sandbox Code Playgroud)


Jar*_*eck 6

这是一个更严格的回应; 关于问题4127的讨论,purp的建议.

class FooController
  rescue_from  ActionView::MissingTemplate, :with => :missing_template

  def missing_template
    render :nothing => true, :status => 406
  end
end
Run Code Online (Sandbox Code Playgroud)


Pau*_*ell 5

我很想在应用程序控制器中解救MissingTemplate并记录Referrer标头以查看触发此请求的内容.你永远不知道,它可能是你自己的应用程序中一些不起眼的部分!

另一方面,如果您确信这是由机器人引起的,您是否考虑过将有问题的URL添加到robots.txt文件中?例如:

User-Agent: YandexImages
Disallow: /your/failed/path
Run Code Online (Sandbox Code Playgroud)

用机器人绊倒的路径替换"你的/失败/路径".如果机器人在整个地方挣扎,你可能只是不允许访问该特定机器人的整个站点:

User-Agent: YandexImages
Disallow: /
Run Code Online (Sandbox Code Playgroud)

我认为这比实现一个专门用于抑制看似表现不佳的机器人的错误的处理程序更简洁明了.