【问题标题】:Can't start a Elixir Phoenix as a mix release无法将 Elixir Phoenix 作为混合版本启动
【发布时间】:2020-03-07 23:49:12
【问题描述】:

我无法从mix release 开始我的项目。但是如果我运行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

运行mix release

运行_build/dev/rel/asdf_umbrella/bin/asdf_umbrella start

应用程序只是挂在那里。

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

我的版本信息:

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)

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    首先在配置方面,在新版本的 distillery 中有一个新功能,称为运行时配置,女巫受到青睐而不是编译时的配置,您可以阅读更多关于它们的信息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!/1bang版本,如果不设置环境变量会报错。

    【讨论】:

    • 如何使环境变量在服务器中可用?在.bashrc?也许在/etc/systemd/system/yourapp.service
    • 视情况而定,通常你有一个 dockerized 解决方案,你可以在启动服务器之前设置你的环境变量。
    • 假设您将通过 systemd 运行您的应用程序,您究竟将数据库环境变量放在哪里?
    猜你喜欢
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2023-04-01
    • 2017-04-05
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    相关资源
    最近更新 更多