2017-03-02 6 views
0

--settings jsonファイルをスーパーバイザに流星に渡すにはどうすればよいですか? 私は自宅のコマンドからの流星runコマンドを実行すると、すべてが完璧です:Meteor settings.jsonを使用するスーパーバイザ起動時

[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 

meteor --settings settings.json 

これが私の現在のconf.dファイルです

設定.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"] 

私の恒久的な解決策は、私がきちんとbashの代わりにsupervisordにMETEOR_SETTINGS変数を設定することができるようにシェルスクリプトでnodeコマンドをラップすることでした。

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}}"                            

このようなシェルスクリプトを作成します。

#!/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にしています。

将来のgoogler向けの編集:jsonデータを一重引用符で囲む限り、systemdは正常に動作することに気づきました。個人的には、上記のcat | trコマンドを使用してJSONデータを抽出し、それを可能な事実に入れてから、SystemFileのMeteorサービスユニットの環境ファイルのテンプレートにその事実を使用して、これを実現します。