如何防止流星观看文件?

我想使用Meteor的Dojo Toolkit。

  • 我首先复制/public的整个Dojo Toolkit树

  • 然后,我将它包含在客户端:

    <script src="/dojo/dojo.js" data-dojo-config="async: true"></script>`
    
  • 一切工作正常,除了Meteor实际上是监视/public每个文件以进行更改,以便它可以重新启动服务器。 这在localhost:3000的第一次请求期间实际上会导致非常长的延迟。

    有没有办法阻止Meteor从某个目录查看文件?


    Dojo工具包是10k +文件,所以我得到这里所述的EMFILE错误,并用

    sudo sh -c 'echo 16384 > /proc/sys/fs/inotify/max_user_watches'
    

    意识到这是重复的:用Meteor生成和提供静态文件

    请参阅:https://github.com/meteor/meteor/issues/437

    这对我来说是一个主要问题。 我必须提供〜12000个静态图像,我最初将其放入公用文件夹。 这导致节点不断地使用几乎100%的一个CPU核心。 由于内存有限,该应用程序崩溃。

    我目前使用的解决方法

  • 创建文件夹public/.#static/并将所有静态资产移入其中。 这个文件夹不被流星观看
  • 使用静态前缀url( /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)server / 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尝试提供包含参数的文件名。 这很容易改变。
  • Meteor完全不知道这些文件,因此它们不会被包含在appcache清单中。 如果您想让它们脱机使用,请查看我添加到https://github.com/buildhybrid/appcache-extra的addPaths选项
  • 如果您不想解决问题,请考虑从外部服务(例如AWS S3)提供资产。


    对于Meteor建立的大规模应用来说,这是一个大问题。 我在Meteor与Matt交谈,他说他们的团队正在为即将发布的其中一个版本解决这个问题。 因此,请阅读他们的通讯,并在可用时通知您。

    Mathieu,你的评论:

    我终于找到了解决方法。 我将所有内容放在/ public / lib /中。 然后,/usr/lib/meteor/app/run.js的第286行添加了我不想Meteor监视的文件夹:self.exclude_paths = [path.join(app_dir,'.meteor',' local'),path.join(app_dir,'public','lib')]; 通过这种方式,我可以在lib中获得尽可能多的文件,而且它们不会放慢速度。 包含路径是'/lib/dojo/dojo.js'。

    现在是一个很好的黑客攻击,以下是即将发布的版本中还涉及的其他相关问题:

  • 一些软件包有重叠的依赖关系,但不要像PHP中的require_once()那样排除它们。

  • 本地需要/定义动态脚本加载器,因此并非所有文件都可以在条目1上加载,可以计算依赖性顺序,而不必进入level,lib或main。*

  • 一种官方的方式来创建和部署软件包到存储库。 目前它使用陨石(mrt)和大气。

  • 链接地址: http://www.djcxy.com/p/73405.html

    上一篇: How to prevent Meteor from watching files?

    下一篇: Django group based User Access Control