Host Meteor (MeteorJS) on Linux (Debian) using systemd connecting to MongoDB. Error: URL must be in the format mongodb://user:pass@host:port/dbname
Host Meteor (MeteorJS) on Linux (Debian) using systemd connecting to MongoDB. Error: URL must be in the format mongodb://user:pass@host:port/dbname
我有一个简单的 Meteor Web 应用程序,我正试图将其托管在我自己的服务器上。
服务器详细信息;
- Debian(杰西)Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt2-1 (2014-12-08) x86_64 GNU/Linux
- systemd
- NodeJS 版本 0.10.36
- 流星版本 1.0.3.1
- MongoDB 版本 2.6.7
/etc/systemd/system/customwebapp.服务文件;
[Service]
ExecStart=/usr/bin/node /opt/customwebapp/bundle/main.js
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=customwebapp
User=customwebapp
Group=customwebapp
Environment=NODE_ENV=production MONGO_URL='mongodb://localhost'
[Install]
WantedBy=multi-user.target
我使用创建服务帐户;
sudo useradd -mrU customwebapp
我使用以下方法构建 Meteor 应用程序;
sudo meteor build --directory /opt/customwebapp
cd /opt/customwebapp/programs/server
sudo npm install
我尝试注册服务;
sudo systemctl enable customwebapp
sudo systemctl start customwebapp
Syslog 报告以下内容;
/opt/customwebapp/bundle/programs/server/node_modules/fibers/future.js:173
Error: URL must be in the format mongodb://user:pass@host:port/dbname
at Error (<anonymous>)
我已经尝试了几个小时来解决这个问题。
我使用了许多不同的 MONGO_URL 值。
我使用 mongo 命令在 MongoDB 中创建了一个管理员或 root 用户,并将 user:pass@localhost:27017/customwebapp 格式放入 URL 环境变量中。
无论我做什么,它都会返回同样的错误。
我也尝试过使用 Meteor Up,但它似乎配置了 Upstart 而不是 systemd。
不用说,我已经尝试过大量来自 SO 的解决方案。此处并未列出我尝试过的所有解决方案。
我怀疑我遇到问题的原因是 systemd。
这是我关于 SO 的第一个问题,因为老实说,我遇到的大多数问题都是别人遇到过的。 SO 对我的帮助非常出色,而且已经有很多次了。现在我希望 SO 能再次提供帮助。
感谢您抽出宝贵时间提供帮助。
好的,我在深入研究名为 Url
的 NodeJS 核心模块中的源代码后发现了问题
正如您从我上面的问题中看到的那样,我使用这一行在服务单元文件中设置了环境;
Environment=NODE_ENV=production MONGO_URL='mongodb://localhost'
节点 Url 模块正在检测单引号 ' 并将其替换为 %27。这导致 Url.parse 函数无法设置主机值。
这是在多行中设置环境值且不使用单引号的正确方法;
Environment=NODE_ENV=production
Environment=MONGO_URL=mongodb://localhost
Environment=ROOT_URL=http://localhost:8080
Environment=PORT=8080
总是语法上的小问题不是吗。
我有一个简单的 Meteor Web 应用程序,我正试图将其托管在我自己的服务器上。 服务器详细信息;
- Debian(杰西)Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt2-1 (2014-12-08) x86_64 GNU/Linux
- systemd
- NodeJS 版本 0.10.36
- 流星版本 1.0.3.1
- MongoDB 版本 2.6.7
/etc/systemd/system/customwebapp.服务文件;
[Service]
ExecStart=/usr/bin/node /opt/customwebapp/bundle/main.js
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=customwebapp
User=customwebapp
Group=customwebapp
Environment=NODE_ENV=production MONGO_URL='mongodb://localhost'
[Install]
WantedBy=multi-user.target
我使用创建服务帐户;
sudo useradd -mrU customwebapp
我使用以下方法构建 Meteor 应用程序;
sudo meteor build --directory /opt/customwebapp
cd /opt/customwebapp/programs/server
sudo npm install
我尝试注册服务;
sudo systemctl enable customwebapp
sudo systemctl start customwebapp
Syslog 报告以下内容;
/opt/customwebapp/bundle/programs/server/node_modules/fibers/future.js:173
Error: URL must be in the format mongodb://user:pass@host:port/dbname
at Error (<anonymous>)
我已经尝试了几个小时来解决这个问题。 我使用了许多不同的 MONGO_URL 值。 我使用 mongo 命令在 MongoDB 中创建了一个管理员或 root 用户,并将 user:pass@localhost:27017/customwebapp 格式放入 URL 环境变量中。
无论我做什么,它都会返回同样的错误。
我也尝试过使用 Meteor Up,但它似乎配置了 Upstart 而不是 systemd。
不用说,我已经尝试过大量来自 SO 的解决方案。此处并未列出我尝试过的所有解决方案。
我怀疑我遇到问题的原因是 systemd。
这是我关于 SO 的第一个问题,因为老实说,我遇到的大多数问题都是别人遇到过的。 SO 对我的帮助非常出色,而且已经有很多次了。现在我希望 SO 能再次提供帮助。
感谢您抽出宝贵时间提供帮助。
好的,我在深入研究名为 Url
的 NodeJS 核心模块中的源代码后发现了问题正如您从我上面的问题中看到的那样,我使用这一行在服务单元文件中设置了环境;
Environment=NODE_ENV=production MONGO_URL='mongodb://localhost'
节点 Url 模块正在检测单引号 ' 并将其替换为 %27。这导致 Url.parse 函数无法设置主机值。
这是在多行中设置环境值且不使用单引号的正确方法;
Environment=NODE_ENV=production
Environment=MONGO_URL=mongodb://localhost
Environment=ROOT_URL=http://localhost:8080
Environment=PORT=8080
总是语法上的小问题不是吗。