混合版本不适用于 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
有了这个配置,服务器现在可以工作了。
背景
我正在玩 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
有了这个配置,服务器现在可以工作了。