2015-02-06 40 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