【问题标题】:How do I read a file from the local file system from inside a meteor app?如何从流星应用程序内部从本地文件系统读取文件?
【发布时间】:2018-03-24 10:46:36
【问题描述】:

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

但是,当我运行 mup deploy 将其部署到我的 (Ubuntu 14) 服务器时,mup 在启动流星后返回以下错误:

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


【解决方案1】:

您应该密切关注 mup 文档。您是否在 mup 配置中看到过卷设置?试试这个来解决你的问题。

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

以下是来自http://meteor-up.com/docs.html 的 mup 配置部分,一切都已配置,阅读更多内容以获得更好的想法。

    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'
    },

【讨论】:

    【解决方案2】:

    您在服务器上运行流星构建的用户需要有权访问该文件夹 - 读取权限。我会将文件存储在与主目录不同的目录中,因为您不想弄乱它。无论哪种方式,像chmod -R 444 /home/sam/data 这样的操作都应该授予任何用户对该目录中所有文件的读取权限。您可能在 macOS 的开发模式下以本地用户 (sam?) 的身份运行 meteor,但由于 mupforever,构建后在 ubuntu 上以 meteor 或其他用户的身份运行.

    【讨论】:

    • 根据我的 mup 配置,mup 正在使用 root 部署在服务器上。这应该让 mup(我也假设为流星)有足够的权限来读取 /home/sam 中的文件,对吧?
    • 这是不正确的,您应该查看为您的流星构建运行的节点进程 - 在大多数情况下,它与 root 不同。也不推荐以root 运行流星的 AFAIK。此外,根据您的主文件夹的权限,root 可能无法从那里读取。
    • 我做了一个ps aux,它显示节点为root:root 2585 1.0 7.4 1213152 75200 ? Sl 06:16 1:00 node main.js 无论如何都要尝试更改权限,看看是否有帮助
    • 您应该尝试使用top,然后按z,然后按x,然后使用shift + ,shift + . 在列中移动并按%CPU%MEM 排序可能有多个节点进程。但是,是的,只需尝试权限或移动文件并再次尝试读取它。
    猜你喜欢
    • 1970-01-01
    • 2013-05-21
    • 2015-02-17
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多