混合版本不适用于 Phoenix 实时取景演示应用程序

Mix release not working on Phoenix live view demo app

背景

我正在玩 Phoenix LiveView,我已经用 mix phx.new demo --live --no-ecto 设置了一个应用程序。

我的主要 objective 是创建此应用程序的一个版本,这样我就可以根据需要对其进行调整,但我遇到了麻烦。

问题

为了为我的演示应用程序创建一个版本,我遵循了 Deploying with releases 教程并更改了所有必要的文件。

在我的 mix.exs 中添加了以下内容:

  def project do
    [
      app: :demo,
      version: "0.1.0",
      elixir: "~> 1.7",
      elixirc_paths: elixirc_paths(Mix.env()),
      compilers: [:phoenix, :gettext] ++ Mix.compilers(),
      start_permanent: Mix.env() == :prod,
      aliases: aliases(),
      deps: deps(),
      releases: releases()
    ]
  end

  defp releases, do:
    [
      demo: [
        applications: [demo: :permanent]
      ]
    ]

并正确更改运行时配置中列出的文件:

https://hexdocs.pm/phoenix/releases.html#runtime-configuration

然而,当我执行 _build/prod/rel/my_app/bin/demo start 时没有任何反应。如果我执行 _build/prod/rel/my_app/bin/demo start_iex 我会得到以下输出:

$ _build/prod/rel/demo/bin/demo start_iex
Erlang/OTP 22 [erts-10.6.4] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [hipe]

*** ERROR: Shell process terminated! (^G to start new job) ***
Erlang/OTP 22 [erts-10.6.4] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [hipe]

Interactive Elixir (1.11.3) - press Ctrl+C to exit (type h() ENTER for help)
iex>

这让我相信发生了崩溃。

当我访问 localhost:4000 时,它说服务器已关闭。

问题

我做错了什么?

回答

问题出在我原来的配置文件中 config/config.exs

我有

# Configures the endpoint
config :demo, DemoWeb.Endpoint,
  url: [host: "localhost"],
  secret_key_base: "MY_SECRET_KEY",
  render_errors: [view: DemoWeb.ErrorView, accepts: ~w(html json), layout: false],
  pubsub_server: Demo.PubSub,
  live_view: [signing_salt: "yRZCwQIF"]

这里我漏掉了这行:

# Configures the endpoint
config :demo, DemoWeb.Endpoint,
  server: true

所以完整的配置应该是:

# Configures the endpoint
config :demo, DemoWeb.Endpoint,
  url: [host: "localhost"],
  secret_key_base: "MY_SECRET_KEY",
  render_errors: [view: DemoWeb.ErrorView, accepts: ~w(html json), layout: false],
  pubsub_server: Demo.PubSub,
  live_view: [signing_salt: "yRZCwQIF"],
  server: true

有了这个配置,服务器现在可以工作了。