我的任务是读取应用程序运行时的 JSON 文件并将其存储在配置中。我已经浏览过https://hexdocs.pm/elixir/master/Config.Provider.html
现在我的配置提供程序代码是
defmodule JSONConfigProvider do
@behaviour Config.Provider
# Let's pass the path to the JSON file as config
def init(path) when is_binary(path), do: path
def load(config, path) do
# We need to start any app we may depend on.
{:ok, _} = Application.ensure_all_started(:jason)
json = path |> File.read!() |> Jason.decode!()
json
end
end
Run Code Online (Sandbox Code Playgroud)
当我尝试通过 iex 运行它时,一切看起来都很好
JSONConfigProvider.load([existing: :config, app: [:appname]],"file_path")
Run Code Online (Sandbox Code Playgroud)
下一步是然后在指定您的发布时,您可以在发布配置中指定提供者
我没有混合版本。有什么方法可以将其存储在配置(dev.ex)中吗?
\n\n\n我的任务是在运行时读取 JSON 文件
\nApplication并将其存储在配置中。
应用程序 config和[通常]加载此配置的配置文件之间存在混淆。
\n\nConfigProvider用于将配置从.json文件加载到应用程序配置中。默认情况下,应用程序只会加载.exs配置,因此您实际需要的是指示您的应用程序使用新的提供程序从.json.
我们是否谈论发布并不重要。如果没有语法糖,人们可能会从文件加载 JSON并Application.put_all_env/2通过或Application.put_env/4进行微调来动态更改应用程序配置。
版本在很多方面都有所不同(它超出了这个问题的范围),这就是文档建议更改文件releases部分的原因project。要加载它进行开发,您只需执行以下操作:
defmodule MyApp.Application do\n @moduledoc false\n use Application\n\n @spec start(Application.app(), Application.restart_type()) ::\n Supervisor.on_start()\n def start(_type, _args) do\n config =\n JSONConfigProvider.load(\n [existing: :config, app: [:my_app]], "file_path")\n Application.put_all_env({:my_app, config}, persistent: true)\n\n ...\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
955 次 |
| 最近记录: |