ejabberd 23.01发布版中读取sys.config配置的问题
看起来你在relive调试模式下的配置读取很顺畅,但到了正式发布版就卡壳了,我来帮你梳理几个可能的原因和排查步骤:
先确认发布版里的
sys.config内容是否正确。你提到make rel把sys.config推到了releases/23.01目录,那先去这个路径打开文件,检查里面是否确实包含了{ejabberd, [..., {config, "/你的配置文件路径"}, ...]}这个配置项。有时候发布构建过程中可能会自动合并或覆盖配置,导致你的手动修改没被保留下来。检查ejabberd的启动命令。当你用
bin/ejabberdctl start启动时,有没有额外加-c参数指定配置文件?如果启动时手动指定了配置路径,那sys.config里的config参数会被命令行参数覆盖,这时候application:get_env(ejabberd, config)要么返回你指定的路径,要么因为逻辑覆盖返回undefined,你可以验证下这一点。试试用ejabberd自带的命令读取配置。ejabberd有专门的配置读取命令
bin/ejabberdctl get_config config,比直接调用Erlang的application:get_env更贴合它的配置逻辑,你可以运行这个命令看看能不能拿到正确的值。排查发布构建的配置文件。有些ejabberd项目会用
reltool.config或者其他定制化的发布配置,这些文件可能会过滤或修改sys.config里的ejabberd配置项。你可以检查下项目里的这类配置文件,看看有没有对ejabberd的配置做了限制。用前台启动查看日志。不要用
start后台启动,改用bin/ejabberdctl foreground前台启动,这样能看到完整的启动日志,里面可能会有配置加载的相关提示,比如是否加载了sys.config、是否使用了指定的配置文件等,这些信息能帮你快速定位问题。
你可以先从检查sys.config内容和启动命令这两点入手,应该能很快找到问题所在。
备注:内容来源于stack exchange,提问作者Athena

