Недавно я развернул приложение node с Phusion Passenger для nginx и обнаружил довольно причудливую ошибку в этом процессе:
В моем коде возникла ошибка при попытке создать дочерний_процесс. Я немного отлаживал и в конце концов пришел к выводу, что проблема возникла из переменной среды $PATH
, являющейся undefined в node, и я мог бы решить проблему с директивой passenger_env_var
, подобной этой (показывая выписку моего nginx конфигурации):
server {
listen 80;
server_name blargh.com;
root /home/user/blargh.com/build;
passenger_enabled on;
# For some reason $PATH isn't loaded into node, and we can't spawn child processes without it
passenger_env_var PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games;
}
Я до сих пор не понял, что вызвало эту проблему, но настройка passenger_load_shell_envvars on;
не помогла, и пользователь www-data имел $PATH
envvar, определенный в оболочке. Более того, другие переменные среды (например, $SHELL
), по-видимому, были загружены node, добавив к тайне почему исключение $PATH
.
Кто-нибудь знает, что может вызвать эту проблему?