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

让我们假设我的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和那里有文件夹,如果我手动检查,怎么可能?

事实certificate,如果你有直接通过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前缀问题解决。