Развертывание Meteor с PhusionPassenger: узел не найден в $ PATH - PullRequest
1 голос
/ 02 декабря 2019

Я развертываю приложение, созданное с помощью Meteor 1.8, на сервере под управлением Ubuntu 16.04. Я следовал инструкции здесь , чтобы использовать Phusion Passenger для развертывания приложения в сочетании с Nginx.

Однако способ установки Node.js отличается от способа, описанного вучебник, и это приводит к ошибке. В результате мне нужно изменить переменную среды $PATH, чтобы сообщить Пассажиру, где найти узел.

——— ДЕТАЛИ (можно пропустить) ———

Я установил узел8.16.2 с использованием NVM. У меня есть пользователь без полномочий root по имени meteor для запуска процесса приложения. При входе на сервер под именем meteor команда which node возвращает:

/home/meteor/.nvm/versions/node/v8.16.2/bin/node

Однако, когда я подключаюсь к поддомену, где должно обслуживаться приложение метеор, регистрируется ошибка, утверждающая узел: не найден :

App 32461 output: /bin/sh: 1: exec: node: not found

Чтобы получить больше информации о проблеме, я добавил следующую строку в файл conf nginx, который определяет поддомен:

passenger_friendly_error_pages on;

Мой файл конфигурации nginx теперь выглядит примерно так:

server {
    listen 80;
    server_name example.com;

    # Tell Nginx and Passenger where your app's 'public' directory is
    root /var/www/example/bundle/public;

    # Turn on Passenger
    passenger_enabled on;
    # Tell Passenger that your app is a Meteor app
    passenger_app_type node;
    passenger_startup_file main.js;

    # Tell your app where MongoDB is
    passenger_env_var MONGO_URL mongodb://localhost:27017/gizmo;
    # Tell your app what its root URL is
    passenger_env_var ROOT_URL http://example.com;

    ### DEBUGGING ONLY ! REMOVE FOR PRODUCTION ###
    passenger_friendly_error_pages on;
}

Теперь, Phusion Passenger дает мне полезную страницу с ошибкой. Имеется вкладка Подробная диагностика и вложенная вкладка Подпроцесс . При этом в разделе Переменные среды я вижу, как определяется $PATH:

PATH=/home/meteor/bin:/home/meteor/.local/bin:/usr/local/gradle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

Другими словами, он не знает/home/meteor/.nvm/versions/node/v8.16.2/bin/node.

———— ЖЕЛАЕМОЕ РЕШЕНИЕ ————

Лучшим решением, по-видимому, является добавление пути к узлу к $PATH. Документы PhusionPassenger предлагают редактировать /etc/default/nginx. Я добавил следующую строку в этот файл:

export PATH=/home/meteor/.nvm/versions/node/v8.16.2/bin/:$PATH

Но это не имеет никакого эффекта.

———— STOPGAP SOLUTION ————

В моем решении с временной задержкойбыло создать директорию /home/meteor/bin/ и создать символическую ссылку на приложение узла:

sudo mkdir /home/meteor/bin
sudo ln -s /home/meteor/.nvm/versions/node/v8.16.2/bin/node /home/meteor/bin
sudo chown -R meteor: /home/meteor/bin

Это работает, но я хотел бы понять, как заставить Nginx и PhusionPassenger использовать правильные $PATHв переменных среды.

...