【eggjs】部署egg时碰到的日志权限问题

前两天将一个egg部署到服务器时,用npm start就是启动不了,错误信息为无权限创建log目录。查看工作目录权限,当前用户是有权限的,看了源码,原来是用的npm包的问题。这里简单记录下解决过程。

首先,在生产环境下的启动是通过egg-script 启动的。在启动时,终端会有如下输出:

Save log file to /XXX/XXX

我们查看egg-script的源码,在他的start命令中,找到Save log file,如下

clipboard.png
下一步,找到这个logDir变量声明的地方,往前看就能找到,如下代码:

const HOME = homedir();
const logDir = path.join(HOME, 'logs');

那么这个homeDir()是什么呢?它是npm包node-homedir,它的方法体如下:

const os = require('os');

module.exports = () => {
  if (process.env.MOCK_HOME_DIR) return process.env.MOCK_HOME_DIR;
  if (os.userInfo && os.userInfo().homedir) {
    return os.userInfo().homedir;
  } else if (os.homedir) {
    return os.homedir();
  }
  return process.env.HOME;
};

这就很清楚了,我的服务器是centos,登录账户的userInfo最终返回的homedir就是系统根目录,'/',而不是我的项目工作目录,由于运维设置,我没有权限在系统/logs下写权限,所以出现了一开始提到的错误。

找到原因后就很好办了,按上面的源码,在启动脚本里,先创建个MOCK_HOME_DIR的环境变量,并指定到项目目录即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值