首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新config.exs数据而不退出iex?

如何更新config.exs数据而不退出iex?
EN

Stack Overflow用户
提问于 2022-07-23 20:09:58
回答 1查看 82关注 0票数 0

我的代码如下:

代码语言:javascript
复制
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.usbSeries-1420”改为“tty.usbSeries-1410”

代码语言:javascript
复制
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中可以通过命令更新配置而不退出它吗?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2022-07-24 02:58:35

在编译时读取config.exs。如果希望在启动应用程序时读取值,则可以将值放入runtime.exs中。除了一些必须在编译时配置的技术异常之外,运行时值将覆盖编译时值--也许这就是ptz_port值被重写的方式。

在这两种情况下,值都被读入应用程序的进程字典中,因此它们可以在运行时被读取和修改(例如,当您在iex会话中时)。例如,您可以:

代码语言:javascript
复制
Application.put_env(Mechanics, ptz_speed: 4567)

有一个Application.put_all_env/2函数,但是为了这个目的重用现有的配置文件可能会遇到困难。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73093921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档