gpt4 book ai didi

elixir - 无法将 Elixir Phoenix 作为混合版本启动

转载 作者:行者123 更新时间:2023-12-04 01:38:00 27 4
gpt4 key购买 nike

我无法从混合版本 开始我的项目。但是如果我运行 mix phx.server

它工作正常

我可以通过执行以下操作从空项目中重现此问题:

mix phx.new asdf --umbrella --no-ecto --no-html --no-webpack

然后编辑 mix.exs 并添加一个发布部分:

def project do
[
apps_path: "apps",
start_permanent: Mix.env() == :prod,
deps: deps(),
version: "0.1.0",
releases: [
mega_umbrella: [
applications: [
mega: :permanent,
mega_web: :permanent
]
]
]
]
end

然后从 config/prod.exs 中删除最后一行

#import_config "prod.secret.exs

运行混合发布

运行 _build/dev/rel/asdf_umbrella/bin/asdf_umbrella 开始

应用程序就卡在那里。

我做错了什么,为什么它就卡在那里?

我的版本信息:

elixir --version
Erlang/OTP 22 [erts-10.5.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe] [dtrace]

Elixir 1.9.2 (compiled with Erlang/OTP 22)

最佳答案

首先说到配置,在新版本的 distillery 中有一个新特性,称为运行时配置,witch 比编译时的配置更受青睐,您可以阅读更多关于它们的信息 here .

此功能背后的基本思想是您可以在服务器运行时获取环境变量,与您必须在构建时提供所有配置的旧配置相比,这在使用容器和一般情况下非常方便更灵活。

运行时配置的步骤如下:

  1. config 文件夹中创建 releases.exs 文件;
  2. 复制您在 prod.exs 中提供的所有配置,或者至少复制您要覆盖的部分;
  3. 使用System.fetch_env!\1从环境变量中获取数据;

你应该记住,运行时配置会覆盖以前的配置,所以如果你在编译时提供 prod.exs 配置,releases.exs 中的所有新内容都会覆盖旧配置。

此类配置的一部分的示例是:

config :tachocard_api, TachocardApi.Repo,
username: System.fetch_env!("PGUSER"),
password: System.fetch_env!("PGPASSWORD"),
database: System.fetch_env!("PGDATABASE"),
hostname: System.fetch_env!("PGHOST"),
pool_size: 10

然后在您的部署环境中将这些环境变量设置为您需要的值。 System.fetch_env!/1 推荐使用bang版本,不设置环境变量会报错。

关于elixir - 无法将 Elixir Phoenix 作为混合版本启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58815793/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com