Elixir 如何在运行时配置EXTO?
根据,我在Elixir 如何在运行时配置EXTO?,elixir,ecto,Elixir,Ecto,根据,我在config/config.exs文件中有以下的EXTO配置: config :my_app, MyApp.Repo, adapter: Ecto.Adapters.Postgres, url: "postgresql://postgres@localhost/myrepo", size: 20 如果我的理解是正确的,config.exs将在编译时进行计算 有没有办法在运行时执行此配置步骤 这适用于将作为编译二进制文件分发的应用程序(通过exrm)。最终用户应该能够通过标
config/config.exs
文件中有以下的EXTO配置:
config :my_app, MyApp.Repo,
adapter: Ecto.Adapters.Postgres,
url: "postgresql://postgres@localhost/myrepo",
size: 20
如果我的理解是正确的,config.exs
将在编译时进行计算
有没有办法在运行时执行此配置步骤
这适用于将作为编译二进制文件分发的应用程序(通过
exrm
)。最终用户应该能够通过标志或环境变量自定义数据库url和池大小,而不是通过编辑sys.config
可以使用{:system,“KEY”}
从系统加载,例如:
config :my_app Repo
url: {:system, "DATABASE_URL" },
size: {:system, "DATABASE_POOL_SIZE" }
反而
config :my_app, Repo,
url: "ecto://postgres:postgres@localhost/ecto_simple",
size: 20
在本例中,您将设置EXTO以使用系统属性。当然,用户必须对其进行配置。使用{:system,“KEY”}
已经完成
相反,建议您在回购模块中定义一个,以设置运行时配置:
def init(_type, config) do
config = Keyword.put(config, :url, System.get_env("DATABASE_URL"))
{:ok, config}
end
使用运行时
init/2
函数可以从不止一个环境变量中读取配置。值得注意的是,如果使用混合版本,有一种新方法,包括使用一个文件来配置运行时选项: