2015-02-06 38 views
3

我有一个简单的Meteor网络应用程序,我试图在自己的服务器上托管。 服务器的详细信息;使用systemd连接到MongoDB的Linux(Debian)上的Host Meteor(MeteorJS)。错误:URL的格式必须是mongodb:// user:pass @ host:port/dbname

  • 的Debian(杰西)的Linux 3.16.0-4-AMD64#1 SMP的Debian 3.16.7-ckt2-1(2014年12月8日)x86_64的GNU/Linux的
  • systemd
  • 版本的NodeJS 0.10 0.36
  • 流星版本1.0.3.1
  • MongoDB的版本2.6.7

/etc/systemd/system/customwebapp.service文件;

[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:[email protected]:port/dbname 
at Error (<anonymous>) 

我试了几个小时才解决了这个问题。 我已经使用了许多不同的MONGO_URL值。 我使用mongo命令在MongoDB中创建了一个管理员或root用户,并将用户:pass @ localhost:27017/customwebapp格式放入URL环境变量中。

无论我做什么,它都会返回相同的错误。

我也尝试使用流星,但它似乎配置Upstart不systemd。

不言而喻,我已经尝试了大量来自SO的解决方案。并非所有我尝试过的解决方案都列在这里。

我怀疑我有问题的原因是因为systemd。

这是我的第一个问题,因为说实话,我有别人的大多数问题都有我面前的问题。这对我来说很有帮助,而且有很多次。现在我希望这会再次帮助。

感谢您抽出时间帮助。

+0

你的'URL'似乎是正确的。你能确定你是否正在读取配置文件中的正确属性。 – BatScream 2015-02-06 06:32:27

+0

对不起BatScream,你在说什么配置文件? – 2015-02-17 01:52:09

回答

5

OK,我发现挖掘到的源代码名为Url

你可以从我的问题看上面我是用这条线设置环境在服务单元文件中核心的NodeJS模块后的问题;

Environment=NODE_ENV=production MONGO_URL='mongodb://localhost' 

Node Url模块检测到单引号'并将其替换为%27。这导致Url.parse函数无法设置主机值。

以下是在多行上设置环境值并且没有单引号的正确方法;

Environment=NODE_ENV=production 
Environment=MONGO_URL=mongodb://localhost 
Environment=ROOT_URL=http://localhost:8080 
Environment=PORT=8080 

它总是小的语法问题不是它。

+0

你应该标记自己的答案作为答案(如果有意义的话)来关闭这个问题。 – 2015-04-23 22:05:03