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

dojo – 如何防止Meteor看文件?

发布时间:2020-12-16 22:03:35 所属栏目:百科 来源:网络整理
导读:我想使用 Dojo Toolkit与 Meteor. 我首先将整个Dojo Toolkit树复制到/ public中 然后,我将它包含在客户端: script src="/dojo/dojo.js" data-dojo-config="async: true"/script` 一切正常,除了Meteor实际上监视/ public中的每个文件进行更改,以便它可以重新
我想使用 Dojo Toolkit与 Meteor.

>我首先将整个Dojo Toolkit树复制到/ public中
>然后,我将它包含在客户端:

<script src="/dojo/dojo.js" data-dojo-config="async: true"></script>`

一切正常,除了Meteor实际上监视/ public中的每个文件进行更改,以便它可以重新启动服务器.这实际上是在localhost:3000的第一个请求期间造成很长的延迟.

有没有一种防止Meteor从某个目录看文件的方法?

Dojo Toolkit是10k文件,所以我得到了声明为here的EMFILE错误

sudo sh -c 'echo 16384 > /proc/sys/fs/inotify/max_user_watches'
意识到这是重复的: generating and serving static files with Meteor

见:https://github.com/meteor/meteor/issues/437

这是我的一个主要问题.我必须提供?12000个静态图像,我最初放入公用文件夹.这导致节点不断使用一个CPU内核的近100%.由于内存有限,应用程序崩溃.

我正在使用的解决方法

>创建文件夹public /.# static /并将所有静态资产移动到其中.流星没有观看这个文件夹
>带静态的前缀urls(/img/cat.png – > /static/img/cat.png)
>安装mime npm包

cd ~/.meteor/tools/latest/lib/node_modules/
npm install mime

>创建一个rawConnectionHandler来为资产提供服务(信用:https://stackoverflow.com/a/20358612)
服务器/ static_files_handler.coffee

fs = Npm.require('fs')
mime = Npm.require('mime')
WebApp.rawConnectHandlers.use (req,res,next) ->
  re = /^/static/(.*)$/.exec(req.url)
  if re isnt null # Only handle URLs that start with /static/*
    filePath = process.env.PWD + "/public/.#static/" + re[1]
    type = mime.lookup(filePath)
    data = fs.readFileSync(filePath,data)
    res.writeHead 200,"Content-Type": type

    res.write data
    res.end()
  else # Other urls will have default behaviors
    next()
  return

这种方法的局限性:

>不适合使用查询参数提供资产.正则表达式还将匹配/static/html/image.html?src=/static/img/cat.png尝试提供包含参数的文件名的文件.这很容易改变.
>流星完全不知道这些文件,因此它们不会被包含在Appcache清单中.如果要让它们脱机使用,请查看我添加到https://github.com/buildhybrid/appcache-extra的addPaths选项

如果您不想解决问题,请考虑从外部服务(例如AWS S3)提供资产.

(编辑:李大同)

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

    推荐文章
      热点阅读