即使存在持久性文件夹,应用程序也会因“错误:ENOENT”而崩溃

时间:2016-06-29 09:56:12

标签: 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怎么可能,如果我手动检查那里有文件夹?

1 个答案:

答案 0 :(得分:1)

事实证明,如果您通过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前缀才能解决问题。