主管在启动时使用 Meteor settings.json
Supervisor using Meteor settings.json On Launch
如何通过 supervisor 将 --settings
json 文件传递给流星?
如果我从 home 命令 运行 meteor 运行 命令,一切都很完美:
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"
}
}
}
我很惊讶还没有人回答这个问题。当我试图找出如何将 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 脚本包装节点命令,这样我就可以在 bash 中正确设置 METEOR_SETTINGS 变量而不是 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 脚本来包装节点。
为将来编辑 googlers:我最终意识到只要将 json 数据放在单引号之间,systemd 就可以正常工作。我个人使用 ansible 完成此操作,使用我上面提到的 cat|tr 命令提取 JSON 数据,将其放入一个 ansible 事实,然后在我的 EnvironmentFile 模板中为 systemd 中的 Meteor 服务单元使用该事实。
如何通过 supervisor 将 --settings
json 文件传递给流星?
如果我从 home 命令 运行 meteor 运行 命令,一切都很完美:
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"
}
}
}
我很惊讶还没有人回答这个问题。当我试图找出如何将 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 脚本包装节点命令,这样我就可以在 bash 中正确设置 METEOR_SETTINGS 变量而不是 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 脚本来包装节点。
为将来编辑 googlers:我最终意识到只要将 json 数据放在单引号之间,systemd 就可以正常工作。我个人使用 ansible 完成此操作,使用我上面提到的 cat|tr 命令提取 JSON 数据,将其放入一个 ansible 事实,然后在我的 EnvironmentFile 模板中为 systemd 中的 Meteor 服务单元使用该事实。