nginx - 使用 PhusionPassenger 部署 Meteor:在 $PATH 中找不到节点
问题描述
我正在运行 Ubuntu 16.04 的服务器上部署使用 Meteor 1.8 制作的应用程序。我一直按照这里的教程使用 Phusion Passenger 来部署与 Nginx 相关的应用程序。
但是,我安装 Node.js 的方式与教程中描述的方式不同,这会导致错误。因此,我需要更改$PATH
环境变量来告诉Passenger 在哪里可以找到节点。
——— 详情(可跳过)———</p>
我已经使用 NVM 安装了 Node 8.16.2。meteor
我有一个名为运行应用程序进程的非 root 用户。以 身份登录服务器时meteor
,命令which node
返回:
/home/meteor/.nvm/versions/node/v8.16.2/bin/node
但是,当我连接到应该为流星应用程序提供服务的子域时,会记录一个错误,声称node: not found:
App 32461 output: /bin/sh: 1: exec: node: not found
为了获得有关该问题的更多信息,我在定义子域的 nginx conf 文件中添加了以下行:
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
.
————期望的解决方案————</p>
最好的解决方案似乎是将节点的路径添加到$PATH
. PhusionPassenger文档建议编辑/etc/default/nginx
. 我在此文件中添加了以下行:
export PATH=/home/meteor/.nvm/versions/node/v8.16.2/bin/:$PATH
但这没有效果。
————权宜之计————</p>
我的权宜之计是创建director/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
在环境变量中使用正确的。
解决方案
推荐阅读
- spring-data-rest - 如何使用 Bowman 库访问 Spring Data Rest 响应_links?
- google-apps-script - GScript 将同一文档中的多个工作表转换为单个 PDF,并将每个 PDF 发送到每个工作表上单元格 B2 中包含的电子邮件地址
- coq - Simplifying expression with lists equality
- c++ - 使用动态数组进行初始化为其索引分配的默认值是什么?
- vue.js - Kendo-Vue 隐藏列中的按钮?
- python - 使用 pip 安装 pygame 时出现错误消息
- reactjs - 如何硬编码简单的身份验证(无后端)并重定向到主页 - React
- mysql - 使用 Join 时如何选择不同的记录?
- regex - Splunk 正则表达式以匹配部分 url 字符串
- c# - 如何使用 FIFO 堆栈解决这一挑战?