Erlang sys.config与sys.config.src的用法
配置方式:
支持两种配置:
- 配置引用的配置文件(一般不会用到)
- 配置application下的
key-value
例如:
%% sys.config
[
"./config/other_app/config.config", % 引用其他文件
{mnesia, [ % application 为mnesia,该app下只有一个key配置就是dir
{dir, "/data/database/app/mnesia"}
]},
{config, [ % application 为config,下面有三个配置
{port, 8080},
{link, 20000},
{mode, super}
]
]
加载方式:
erlang启动时需要在erl
命令后面跟上-config config目录
来加载sys.config
配置内容。
读取方式:
在代码中,使用application:get_env(1/2)
来读取配置的内容。
例如:
1> application:get_env(mnesia, dir).
"/data/database/app/mnesia"
2> application:get_env(config, port).
8080
3> application:get_env(config, not_exist_key).
undfeined
sys.config.src
sys.config
只能配置静态变量,所以引用目录或者根据不同的节点,定制一些不同的策略很难实现。sys.config.src
增加了一个功能,就是可以引用变量。
需要搭配shell脚本使用,需要在shell中export变量,然后在sys.config.src
中引用才可以。
例如:
% sys.config.src
{
{my_app, [{port, ${PORT}}]} % port是环境变量,写法跟Shell 一样
}
# CTRL
export PORT=8080
export
case "$1" in
"start")
./bin/my_app console $@
;;
"*")
echo "start 交互式启动(同时打开erlang shell)"
;;
esac
# shell
bash ctrl start
%% erlang shell
> application:get_env(my_app, port).
8080
进阶用法,在变量中运行更多命令
./
├── apps
│ └── ...
├── _build
│ └── ...
├── config
│ ├── sys.config.src
│ ├── sys.env # 环境变量导出
│ └── vm.args.src
├── ctrl # 引用sys.env导出的环境变量
├── rebar.config
├── script
│ └── get_common_setting.es # 读取setting配置的脚本
├── setting
│ └── service.config
└── src
└── ...
# sys.env
## ============ base =================
CUR_DIR=$(cd $(dirname ${BASH_SOURCE[0]}); pwd)
ROOT_DIR=$(cd ${CUR_DIR}/../; pwd)
export ERL=$(readlink -f /usr/local/bin/erl)
export ESCRIPT=$(readlink -f /usr/local/bin/escript)
## ============ 私人定制 ===============
# 节点相关
ALL_ARGS_ARRAY=$(${ESCRIPT} "${ROOT_DIR}/script/get_setting.es game_id")
export GAME_ID=${ALL_ARG_ARRAY[0]}
Erlang sys.config与sys.config.src的用法
https://qiil.github.io/2022/10/18/Erlang-sys-config与sys-config-src的用法/