流星停止监视公用文件夹

时间:2017-07-25 09:27:48

标签: javascript meteor

我在公共文件夹中创建了uplods文件夹。

此文件夹包含我系统的所有已上传图像。

我会尽快上传文件,自动刷新浏览器。

我保持上传〜和〜上传但是一旦文件上传,那么它就会重新加载。

我想通过localhost:3000访问它,所以this解决方案对我不起作用

2 个答案:

答案 0 :(得分:0)

Meteor将一直关注开发模式下的文件更改。您可以在生产模式下运行,但每次更改代码时都需要刷新...

您不希望将上传的内容公开存储。

以下是关于Meteor论坛关于此主题的答案: https://forums.meteor.com/t/why-shouldnt-i-upload-files-in-the-public-directory/36899/3

  

使用除了流星应用之外的其他内容   管理/存储/提供用户文件有很多好处。

     

如果您的应用程序崩溃,文件服务器仍然可用(当前上传   将继续)。如果您的文件服务器崩溃,应用程序仍然可以   运行并使用。流星不擅长提供文件,所以服务   用户的文件将影响您的应用程序性能和文件   服务本身。将文件存储在Meteor的公共文件夹中   可供全世界使用,您可能不希望这样。文件处理   和服务器应用程序不需要相同的服务器规范,   所以你以后想要把它们分开。编辑:

     

我意识到这一点,同时对你的其他选择给出了更好的见解   根本没有回答你的问题。

     

为什么不能公开存储用户的文件?正如有人指出的那样,   公开的任何文件都可供全世界使用。公用文件夹   与您的应用捆绑在一起,它被认为是您的来源的一部分。   它旨在存储您的应用程序使用的资源,例如您的   徽标,自定义图标和字体等...就像您的数据库一样   用户的文件是动态数据,应与您的代码分开,   您的应用程序不需要它们来运行。他们习惯了   存储您的应用程序收集的信息,并且非常适合   对,但他们的内容通常不会跟随您的申请   不同的环境,如开发,分期和生产。   当您在进行一些更改后重新绑定应用程序时,您将拥有一个新的应用程序   公用文件夹内容您的图像和字体文件,但不是全部   您工作时用户上传的文件,您将拥有这些文件   确保您没有删除这些文件。即使你的   每个人都可以看到上传的文件,您肯定会使用   数据库,以跟踪上传的文件,他们的上传日期,   所有者,大小,标签等......这意味着即使你保留这些文件   在dev / staging / production中你还需要完整的   database ...在推送到生产时合并数据库更改   将比登记文件夹更难......

一个简单的解决方案就是像你一样使用Meteor,但将文件存储在源代码之外的某个地方。并使用NGINX来提供这些文件。这是我正在使用的NGINX配置......它代表对Meteor的正确请求以及所有以" image"开头的请求。在网址中直接从/img/

提供
server_tokens off; # for security-by-obscurity: stop displaying nginx version

# this section is needed to proxy web-socket connections
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

# HTTP

server {
    listen 80 default_server; # if this is not a default server, remove "default_server"
    #listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html; # root is irrelevant
    index index.html index.htm; # this is also irrelevant

    server_name meteor.localhost; # the domain on which we want to host the application. Since we set "default_server" previously, nginx will answer all hosts anyway.
        access_log /etc/nginx/logs/app.access;
        error_log /etc/nginx/logs/app.error error;

    location / {
       proxy_pass http://localhost:3000;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection $connection_upgrade;
       proxy_set_header Host $host;
       proxy_set_header X-Forwarded-For $remote_addr; # preserve client IP

         if ($uri != '/') {
            expires 30d;
        }
    }
        location /image/{
                alias /img/;
                expires -1;
        }
}

请注意,这意味着您将通过端口80而不是3000访问您的应用程序,因为NGINX将负责代理。

答案 1 :(得分:0)

这对我有用

我已将下面的代码放在客户端启动

Meteor._reload.onMigrate(function() {
 return [false];
});

感谢它按要求正常工作