我有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
身份登录来启动我的网络应用程序,那就可以了。
答案 0 :(得分:0)
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