当前位置: 首页 > 后端技术 > Node.js

[eggjs]部署egg时遇到的日志权限问题

时间:2023-04-03 19:33:00 Node.js

前两天部署一个egg到服务器时,npmstart无法启动,报错信息是未经权限创建日志目录。检查工作目录的权限。当前用户有权限。看了源码,原来是使用的npm包的问题。这里简单记录一下求解过程。首先,生产环境中的启动是通过egg-script启动的。启动时,终端会有如下输出:Savelogfileto/XXX/XXX我们查看了egg-script的源码,在其启动命令中,找到Savelogfile,下一步就是找到logDir所在的地方声明了变量,可以通过向前看找到,如下代码:constHOME=homedir();constlogDir=path.join(HOME,'logs');那么这个homeDir()是什么?是npm包node-homedir,其方法体如下:constos=require('os');module.exports=()=>{if(process.env.MOCK_HOME_DIR)returnprocess.env.MOCK_HOME_DIR;如果(os.userInfo&&os.userInfo().homedir){返回os.userInfo().homedir;}elseif(os.homedir){returnos.homedir();}returnprocess.env.HOME;};很明显我的服务器是centos,登录账号的userInfo返回的homedir是系统根目录,'/',不是我的项目工作目录。由于运维设置,我没有权限在system/logs下写,所以出现了开头说的错误。找到原因后,就好办了。根据上面的源码,在启动脚本中,首先创建一个环境变量MOCK_HOME_DIR,并指定到项目目录下。

最新推荐
猜你喜欢