[英]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
登錄設置為peer
或trust
以便在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.