node.js - 即使持久文件夹存在,应用程序也会崩溃并显示 "Error: ENOENT"

标签 node.js sails.js digital-ocean fs dokku

假设我的 digitalocean/dokku/nodejs/sails 应用程序名为 example.com 并且可以(将)通过相应的域使用。

我通过以下方式为我的应用程序添加了持久存储:

dokku docker-options:add example.com run "-v /home/dokku/_work_:/_work_"
dokku docker-options:add example.com deploy "-v /home/dokku/_work_:/_work_"

如果我运行 dokku run example.com "ls/app/_work_"dokku run example.com "ls/app/_work_/uploads"我可以看到该文件夹存在并且那里有文件/文件夹。

好的,现在在我的应用程序代码中,我想检查 /app/_work_/uploads 文件夹中的文件夹并删除一些旧的文件夹。为此,我首先尝试通过以下方式获取 /app/_work_/uploads 中的文件夹列表:

...
var p = path.join(sails.config.rootPath, '_work_/uploads');
var dirs = fs.readdirSync(p);
...

问题是我的代码失败并出现以下错误:

Error: ENOENT: no such file or directory, scandir '/app/_work_/uploads'
    at Error (native)
    at Object.fs.readdirSync (fs.js:808:18)
    at cleanDirs (/app/config/bootstrap.js:36:16)
    at Object.module.exports.bootstrap (/app/config/bootstrap.js:21:2)
    at Sails.runBootstrap (/app/node_modules/sails/lib/app/private/bootstrap.js:44:25)
    at Sails.wrapper [as runBootstrap] (/app/node_modules/sails/node_modules/lodash/index.js:3095:19)
    at Sails.initialize (/app/node_modules/sails/lib/app/private/initialize.js:68:9)
    at wrapper (/app/node_modules/sails/node_modules/lodash/index.js:3095:19)
    at /app/node_modules/sails/node_modules/async/lib/async.js:713:13
    at iterate (/app/node_modules/sails/node_modules/async/lib/async.js:262:13)
    at /app/node_modules/sails/node_modules/async/lib/async.js:274:29
    at /app/node_modules/sails/node_modules/async/lib/async.js:44:16
    at /app/node_modules/sails/node_modules/async/lib/async.js:718:17
    at /app/node_modules/sails/node_modules/async/lib/async.js:167:37
    at /app/node_modules/sails/lib/app/load.js:184:13
    at /app/node_modules/sails/node_modules/async/lib/async.js:52:16
    at /app/node_modules/sails/node_modules/async/lib/async.js:548:17
    at /app/node_modules/sails/node_modules/async/lib/async.js:542:17
    at _arrayEach (/app/node_modules/sails/node_modules/async/lib/async.js:85:13)
    at Immediate.taskComplete (/app/node_modules/sails/node_modules/async/lib/async.js:541:13)
    at processImmediate [as _immediateCallback] (timers.js:383:17)

如果我手动检查 /app/_work_/uploads 并且那里有文件夹,那怎么可能?

最佳答案

事实证明,如果您有通过 ls 可见的文件,就会发生该事件直接通过docker run <app> <command>命令应用程序看不到它们。为了解决这个问题而不是

dokku docker-options:add example.com run "-v /home/dokku/_work_:/_work_"

您必须添加/app/到命令的第二部分:

dokku docker-options:add example.com run "-v /home/dokku/_work_:/app/_work_"

您将得到相同的lsdokku run ..输出,但最重要的是,您的应用程序现在将能够访问文件。

如果有人能联系我解释原因ls,我将不胜感激在这两种情况下都有效,但只能通过添加 /app前缀问题已解决。

关于node.js - 即使持久文件夹存在,应用程序也会崩溃并显示 "Error: ENOENT",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38096211/

相关文章:

javascript - parseInt vs unary plus,什么时候用哪个?

javascript - 数组字符串在 child_process.exec 的循环中返回为未定义

node.js - 将图像从 URL 保存到 node.js 中的 S3

node.js - Sails-React : Access props from Parent Component

php - Laravel上传文件无法写入目录

javascript - Digitalocean 使用 nginx 部署 Node https 应用程序

node.js - 有没有更好的方法在 typescript 中编写这个递归方法

node.js - 从 Rust 生成的 Node FFI 调用和动态库

javascript - 如何将上传功能外包为node.js服务

node.js - Nginx + NodeJS 重定向到端口 80