我的代码如下:
import Config
# config :logger, :console, format: "[$level] $metadata$message\n",
# metadata: [:module, :function, :my_id]
config Mechanics,
ptz_port: "tty.usbserial-1410",
ptz_speed: 115200,
ptz_check_interval: 5000
ptz_port 已从“tty.usbserial-1420”更改为“tty.usbserial-1410”
iex(16)> Application.get_all_env(Mechanics)
[
ptz_check_interval: 5000,
imu_speed: 115200,
ptz_port: "tty.usbserial-1430",
testkey1: "value1",
imu_port: "tty.usbserial-1420",
ptz_speed: 115200,
imu_pose: "horizon",
imu_check_interval: 5000,
key2: "value2"
]
当我尝试通过调用
Config.config_env()
更新配置时,错误如下。是否可以在 iex 中通过命令更新配置而不退出它?
iex(18)> Config.config_env()
** (RuntimeError) could not set configuration via Config. This usually means you are trying to execute a configuration file directly, instead of reading it with Config.Reader
(elixir 1.13.4) lib/config.ex:91: Config.raise_improper_use!/0
(elixir 1.13.4) lib/config.ex:190: Config.__env__!/0
config.exs
在编译时读取。如果您希望在应用程序启动时读取这些值,您可以将值放入 runtime.exs
中。除了必须在编译时配置的一些技术例外之外,运行时值将覆盖编译时值——也许这就是您的 ptz_port
值被覆盖的方式。
在任何一种情况下,这些值都会被读入应用程序的进程字典中,因此可以在运行时读取和修改它们(例如,当您处于
iex
会话时)。例如,您可以使用如下语句将值放入应用程序的进程字典中:
Application.put_env(Mechanics, ptz_speed: 4567)
有一个
Application.put_all_env/2
功能,但为此目的尝试重用现有配置文件时可能会遇到困难。