繁体   English   中英

使用主管运行节点应用程序时,Postgres连接失败

[英]Postgres connection failure when running node app using supervisor

我有带postresql的nodejs webapp。 我正在服务器上使用supervisor运行它。 问题是从nodejs的postgresql登录失败。 错误消息是:

no PostgreSQL user name specified in startup packet

这基本上意味着在连接到数据库时,不会从Web应用程序传递任何用户名。

请注意,我正在使用unix套接字从我的webapp连接到postgres。

我的webapp1.conf看起来像:

[program:webapp1]
user=webapp1
command = node /home/webapp1/projects/webapp1/app.js
directory = /home/webapp1/projects/webapp1
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/webapp1.log
stderr_logfile = /var/log/supervisor/webapp1_err.log

我已经确认主管正在运行webapp,并且正在用户webapp1下运行。

还有一件事-如果我通过以webapp1用户webapp1登录来启动我的webapp,则它可以正常工作。

听起来好像已经将服务器设置为使用无密码登录PostgreSQL了-即,在pg_hba.conf中将local登录设置为peertrust以便在postgres中配置具有相同用户名的用户将其命名为Linux用户,则无需进行任何其他配置即可使Postgres在您的应用中正常工作-它会根据您的Linux用户帐户有效地授予对数据库的访问权限。

通过cron运行简单的nodejs脚本时,我遇到了同样的问题。 它在Shell上运行良好,但抱怨通过cron运行时缺少用户名。 不能在代码中显式设置用户名,因为我已将配置构建为尽可能自动的-我需要它来确定脚本以哪个用户身份运行。

事实证明,连接器库或postgres本身都可以从环境变量中推断出用户名。 我可以通过在crontab的顶部设置USER=<cron user name>来解决此问题(因为这是在交互式shell的环境中显式设置的,因此这是完全可行的)。

看来添加到您的webapp1.conf的正确语法是:

environment=USER="<user name here>"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM