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

时间:2016-12-18 05:58:10

标签: node.js postgresql supervisord

我有nodejs webapp和postresql。我在服务器上使用supervisord运行它。问题是来自nodejs的postgresql登录失败。错误消息是:

no PostgreSQL user name specified in startup packet

这基本上意味着在连接到db时没有从webapp传递用户名。

请注意,我正在使用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身份登录来启动我的网络应用程序,那就可以了。

1 个答案:

答案 0 :(得分:0)

听起来您已经将服务器设置为对PostgreSQL使用无密码登录 - 即您local设置为pg_hba.conf或{{peer次登录1}}这样只要在postgres中配置了一个与linux用户同名的用户,就不需要进行任何进一步的配置就可以让Postgres在你的应用程序中运行 - 它有效地授予对基于数据库的访问权限在您的Linux用户帐户上。

通过cron运行简单的nodejs脚本时遇到了同样的问题。它从shell运行良好,但抱怨在通过cron运行时缺少用户名。在代码中显式设置用户名不是一个选项,因为我构建的配置尽可能自动 - 我需要它来确定脚本运行的用户的权限。

事实证明,连接器库或postgres本身都是从环境变量中推断出用户名。我能够通过在我的crontab顶部设置trust来修复它(因为这是在交互式shell的env中明确设置的,这就是为什么它可以工作)。

添加到USER=<cron user name>的正确语法似乎是:

webapp1.conf