Javascript 使用nginx与meteor分开提供静态资产和媒体?

Javascript 使用nginx与meteor分开提供静态资产和媒体?,javascript,node.js,meteor,nginx,Javascript,Node.js,Meteor,Nginx,来自Django,我习惯于将我的静态资产和媒体(包括上传)与主wsgi或其他应用程序分开提供。这种平面文件结构易于导航和管理 我似乎找不到任何关于如何使用Meteor实现这一点(分别为静态资产/媒体提供服务)的例子 有没有标准的方法 是否有提供此功能的软件包 我的最终目标是: 能够更直观地导航所有静态资产和媒体,并从公开访问的URL访问它们,而无需热重建meteor应用程序。“公用”文件夹不适合我。。。特别是上传的媒体 在迁移应用程序时手动或通过我编写的自定义应用程序/包上载到此系统路径(与主m

来自Django,我习惯于将我的静态资产和媒体(包括上传)与主wsgi或其他应用程序分开提供。这种平面文件结构易于导航和管理

我似乎找不到任何关于如何使用Meteor实现这一点(分别为静态资产/媒体提供服务)的例子

  • 有没有标准的方法

  • 是否有提供此功能的软件包

  • 我的最终目标是:

  • 能够更直观地导航所有静态资产和媒体,并从公开访问的URL访问它们,而无需热重建meteor应用程序。“公用”文件夹不适合我。。。特别是上传的媒体

  • 在迁移应用程序时手动或通过我编写的自定义应用程序/包上载到此系统路径(与主meteor应用程序分离)

  • 浏览/解析meteor应用程序/软件包的路径


  • 您可以在meteor应用程序中设置一个文件服务器,使用node
    fs
    模块为其提供服务,然后使用类似的方式提供服务,或者在meteor中添加一个连接处理程序的示例(如果不起作用)

    Meteor默认情况下会忽略隐藏的目录,因此如果需要,您可以将资产放在应用程序目录中,例如
    .assets/
    ,否则运行Meteor的用户可以访问文件系统中的任何位置

    这是一个我刚刚拼凑的文本文件服务器。您需要首先执行meteor添加meteorhacks:picker:

    if (Meteor.isServer) {
      var fs = Npm.require('fs');
      Picker.route('/asset/:name', function(params, req, res) {
        fs.readFile('/home/users/someuser/media/' + params.name, function(err, file) {
          res.writeHead(200, {'Content-Type': 'text/plain'});
          res.end(file.toString());
        });
      });
    }
    

    如果您的所有静态资产都有一个公共路径,例如
    /static/..
    ,那么您可以告诉
    nginx
    使用目录请求该路径

    location /static  {
        alias /path/to/static/assets;
    }
    

    如果出于性能和可伸缩性的原因(请参阅我的评论),您应该使用缓存代理。最初,代理将直接从Meteor应用程序获取静态文件,但随后的请求将从其缓存中提供


    本文()是一篇关于如何使用Nginx设置缓存代理的好文章。此外,Meteopedia还解释了如何设置专为Meteor应用程序定制的Nginx缓存。

    假设您的Meteor应用程序位于
    /www/Meteor
    ,您希望从
    /Meteor
    树之外的目录中提供静态资产,以便文件添加/更改/删除不会导致应用程序重新启动,例如
    /www/static

    因此,通常先在nginx中定义流星路径,然后为静态路径定义不同的根,例如:

    location /static {
      root /www/static;
    }
    

    你看到我以前对相关问题的回答了吗;你可以添加带有基于文件系统的存储的collectionsFS,然后你应该拥有你所需要的一切。我相信我的问题更清楚地说明了你的答案适用于什么,因为他也要求在他的数据库中记录请求-还有-我的问题是关于与meteor分开服务静态资产的-你的答案仍然有效据我所知,在meteor应用程序中-(阅读我问题的标题)好吧,你可以忽略我的建议,这只是一个评论,而不是乞求赏金的答案;-)此外,您的问题主体甚至没有提到nginx,但您确实要求“使用Meteor单独提供静态资产/媒体”。无论如何,我相信有人会回答的。我可以问一下你为什么想要这个吗。我知道你解释了一些最终目标,但我觉得真正的动机缺失了。这是出于性能还是可伸缩性的原因?部分是出于性能原因,但主要是因为在模糊的子文件夹路径中导航已部署的meteor站点是件痛苦的事情-我在给定的结构中预编码了千兆字节的视频,这仍然在meteor项目的范围内-我想指定一个任意的文件系统位置,例如。meteor项目位于/home/users/someuser/greatapp中,而资产/媒体位于/home/users/someuser/mediaAh中,我错过了这个要求。您可以访问文件系统中您的用户有权使用fs的任何文件,以便可以将其构建到指向任何位置,如果应用程序在您的应用程序目录中,您只会遇到应用程序重建问题。我将更新我的答案并添加更多细节。