【发布时间】:2017-11-23 00:15:56
【问题描述】:
我使用 exrm 作为发布管理器
我在 prod.exs 中添加了一个配置,因此我可以在运行时检索环境变量“check_origin”
config :my_app, check_origin: "${CHECK_ORIGIN}"
问题在于,websocket 是在编译时配置的
transport :websocket, Phoenix.Transports.WebSocket
所以我不能这样做:
transport :websocket, Phoenix.Transports.WebSocket, check_origin: Application.get_env(:my_app, :check_origin) |> Poison.decode!
有谁知道我如何在运行时配置 websocket 的传输,所以我可以使用环境变量(这是一个编码的 json)
编辑:
这是我已经尝试过的:
def start(_type, _args) do
import Supervisor.Spec, warn: false
c_o = ((Application.get_env(:my_app, :check_origin) || "true") |> Poison.decode!)
Application.put_env(:my_app, MyApp.Endpoint, Application.get_env(:my_app, MyApp.Endpoint) ++ [check_origin: c_o])
......
【问题讨论】:
-
我认为 Distillery 有
REPLACE_OS_VARS=true可以设置的环境变量,它将在启动时替换配置中的环境变量。我尝试在 exrm 中寻找类似的东西,我能看到的都在这里(似乎被称为RELX_REPLACE_OS_VARS):github.com/bitwalker/exrm/blob/… -
是的,在启动时...我的问题是 websocket 的传输设置是在编译时...
标签: websocket elixir phoenix-framework