加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – ActionView :: MissingTemplate错误,仅当由Bot

发布时间:2020-12-16 20:43:28 所属栏目:百科 来源:网络整理
导读:我有一个行动,服务我的主页.当正常访问(即通过Web浏览器中的用户)时,它工作正常,但是当被特定的网页抓取工具访问时,会引发以下错误: A ActionView::MissingTemplate occurred in tags#promoted: Missing template tags/promoted with {:handlers=[:erb,:rjs
我有一个行动,服务我的主页.当正常访问(即通过Web浏览器中的用户)时,它工作正常,但是当被特定的网页抓取工具访问时,会引发以下错误:
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/ruby-1.9.2-p180@accounts/gems/devise-1.3.0/app/views"
 actionpack (3.0.4) lib/action_view/paths.rb:15:in `find'

看来,机器人正在尝试获取文本/ *格式,没有模板,这是有道理的,所以我尝试在我的操作中执行以下操作:

def promoted
   request.format = :html #force html to avoid causing missing template errors
   # more action stuff....
  end

实质上,我试图强制请求的格式为html,所以它服务于HTML模板.

但是每当这些机器人请求此页面时,就会发生缺少的模板错误.

这不是很大的交易,但理想情况下,我想解决这个错误,如果只是这样我停止从我的应用程序收到这些错误的电子邮件.

做一个名为my_action.text.erb的文件的唯一方法是把它放在一起吗?还是我可以更加优雅地解决这个问题?

解决方法

我也看过这些.您可以使用一些中间件来重写这些请求:
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读