如何通过主管将--settings
json文件传递给meteor?
如果我从home命令运行meteor run命令,一切都很完美:
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": "admin@example.com",
"password": "test123"
}
}
}
答案 0 :(得分:1)
我很惊讶没人回答过这个问题。我试图弄清楚如何将settings.json文件放入METEOR_SETTINGS并在supervisor配置中避免语法错误时在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脚本包装node命令,以便我可以在bash而不是supervisord中正确设置METEOR_SETTINGS变量。
因此,请在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脚本来包装节点。
编辑未来的googlers:我最终意识到只要你将json数据放在单引号之间,systemd就能正常工作。我个人用ansible完成了这个,用上面提到的cat | tr命令提取JSON数据,把它放到一个可靠的事实中,然后在我的EnvironmentFile模板中使用systemd中的Meteor服务单元中的事实。