如何从流星应用程序内部读取本地文件系统中的文件?

How do I read a file from the local file system from inside a meteor app?

我有一个 meteor 应用程序需要定期读取位于主机文件系统上的应用程序包之外的文件。我正在使用节点的 fs 来完成这个,它在我的 (macOS) 开发机器上运行良好。

然而,当我运行 mup deploy将其部署到我的(Ubuntu 14)服务器时,mup returns启动流星后出现以下错误:

Error: ENOENT: no such file or directory, open '/home/sam/data/all_data.json' at Object.fs.openSync (fs.js:652:18) at Object.fs.readFileSync (fs.js:553:33)

有谁知道为什么会这样?

您拥有的用户运行在服务器上构建您的 meteor 需要有权访问该文件夹 - 读取权限。我会将文件存储在与主目录不同的目录中,因为您不想弄乱它。无论哪种方式做类似 chmod -R 444 /home/sam/data 的事情都应该为该目录中的所有文件授予任何用户读取权限。您可能 运行宁 meteor 作为您的本地用户(sam?)在您的 macOS 上处于开发模式,但构建得到 运行 作为 meteor 或ubuntu 上的一些其他用户,因为 mupforever.

您应该密切关注 mup 文档。你见过 mup config 中的卷设置吗?试试这个来解决你的问题。

原因:mup 在 docker 中运行应用程序,除非指定,否则无法访问主机文件系统。卷设置通过 mup 部署为您完成此操作。

以下是 http://meteor-up.com/docs.html 的 mup 配置部分,Everything Configured,阅读更多以获得更好的想法。

    name: 'app',
    path: '../app',

    // lets you add docker volumes (optional). Can be used to
    // store files between app deploys and restarts.
    volumes: {
      // passed as '-v /host/path:/container/path' to the docker run command
      '/host/path': '/container/path',
      '/second/host/path': '/second/container/path'
    },