2017-03-02 43 views
0

如何將--settings json文件傳遞給流星與主管? 如果我運行從家庭命令流星運行命令,一切都是完美的:主管使用流星settings.json啓動

meteor --settings settings.json 

這是我目前conf.d文件:

[program:demo] 
command=/usr/local/bin/meteor 
directory=/home/username/demo 
autostart=true 
autorestart=true 
environment= 
    HOME="/home/username", 
    METEOR_SETTINGS="/home/username/demo/settings.json" 
stdout_logfile=/home/username/demo.log 
stdout_logfiel_maxbytes=50MB 
user=username 

它提供了以下錯誤:

Errors prevented isopacket load: 

While loading isopacket `constraint-solver`: 
packages/meteor.js:59:11: METEOR_SETTINGS are not valid JSON: 
/home/username/demo/settings.json 
at packages/meteor.js:59:11 
at packages/meteor.js:80:4 
at packages/meteor.js:1380:3 

settings.json

{ 
    "private": { 
    "init_admin": { 
     "userName": "admin", 
     "email": "[email protected]", 
     "password": "test123" 
    } 
    } 
} 
+0

你可以發佈你的設置文件(其中的任何敏感信息被刪除),所以我們可以看到它是有效的JSON? – Sean

+0

完成。但正如我所說,手動運行它工作正常 – API

回答

1

我很驚訝沒有人已經回答了這個問題。當我試圖找出如何將settings.json文件放入METEOR_SETTINGS並避免監控程序配置中的語法錯誤時,我在google上發現了您的問題。

因爲回答你的問題,METEOR_SETTINGS環境變量必須包含JSON。所以它必須包含settings.json的JSON數據,而不是文件名或路徑

這是有點笨,因爲你把JSON數據放入一個環境變量。所以基本上METEOR_SETTINGS =「$(cat settings.json | tr -d'\ n')」,但是這樣做會導致supervisord出現問題,因爲這種語法顯然不被支持。

"error: <class 'xmlrpclib.Fault'>, <Fault 92: 'CANT_REREAD: Unexpected end of key/value pairs'>: file: /usr/lib64/python2.7/xmlrpclib.py line: 794"] 

我永久的解決辦法是用包裹shell腳本節點命令,這樣我可以正確設置METEOR_SETTINGS變量在bash,而不是supervisord。

所以從supervisord中的環境中刪除METEOR_SETTINGS。 (這是從我的Ansible爲例所以這就是爲什麼值由括號括起來)

[program:pwfrank]                                
directory={{pwfrank_home}}/build/bundle                          
command={{pwfrank_home}}/start_node.sh 
environment=                                 
    HOME="{{pwfrank_home}}",                             
    MONGO_URL="{{pwfrank_mongo_url}}",                           
    PORT="{{pwfrank_listenport}}",                            
    ROOT_URL="{{pwfrank_baseurl}}"                            

,創建這樣例如一個shell腳本。

#!/usr/bin/env bash 

export METEOR_SETTINGS="$(cat {{pwfrank_home}}/pwfrank/{{pwfrank_settings_file}} | tr -d '\n')"            

/usr/local/bin/meteor node main.js  

這爲我工作,但我正在從主管路程,到systemd而是因爲systemd有環境文件,所以我不會有使用shell腳本包節點。

編輯未來的谷歌瀏覽器:我最終意識到systemd可以正常工作,只要你把json數據放在單引號之間。就我個人而言,我完成了這個任務,使用上面提到的cat | tr命令提取JSON數據,並將其放入一個可靠的事實中,然後在我的EnvironmentFile的模板中使用systemd中Meteor服務單元的事實。