Phoenix Framework websocket,在运行时设置check_origin

Phoenix Framework websocket,在运行时设置check_origin,websocket,elixir,phoenix-framework,Websocket,Elixir,Phoenix Framework,我使用exrm作为发布管理器 我在prod.exs中添加了一个配置,以便在运行时检索环境变量“check\u origin” config :my_app, check_origin: "${CHECK_ORIGIN}" 问题在于,websocket在编译时配置为 transport :websocket, Phoenix.Transports.WebSocket 所以我不能这样做: transport :websocket, Phoenix.Transports.WebSocket, ch

我使用exrm作为发布管理器

我在prod.exs中添加了一个配置,以便在运行时检索环境变量“check\u 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])  
......

以下方面应起作用:

首先,跳过
传输
行中的
检查原点

transport :websocket, Phoenix.Transports.WebSocket
然后,在端点模块的
init/2
函数中,在开头添加以下内容:

config = Keyword.put(
  config,
  :check_origin,
  Application.get_env(:my_app, :check_origin) |> Poison.decode!
)
在全新的Phoenix 1.3应用程序中,我发现:

iex(1)> FooWeb.Endpoint.config :check_origin
false
将以下内容添加到
init/2
之后:

config = Keyword.put(config, :check_origin, true)
我得到:

iex(1)> FooWeb.Endpoint.config :check_origin
true

根据,如果在传输的配置中找不到
check\u origin
,则原点检查应返回到此配置变量。尽管如此,请告诉我它是否有效,我还没有测试功能。

我认为蒸馏厂有
REPLACE\u OS\u VARS=true
env-var,您可以设置,它将在启动时替换配置中的env-var。我试着在exrm中寻找类似的东西,我能看到的只有这里(似乎被称为
RELX\u REPLACE\u OS\u VARS
):是的,在启动时。。。我的问题是websocket的传输设置在编译时…实际上,我已经尝试过了。。。正在使用Application.put_env:my_app Endpoint config。。。它似乎不会回退到端点检查原点,尽管检查原点在端点配置中正确设置为。。。或者我错过了什么,我会在编辑中重新尝试,这是我已经尝试过的。。。似乎是相同的想法,但不起作用:-(如果我在端点的init中这样做,它会改变什么吗?它应该会改变。你的代码的问题是对
transport
的调用是在编译时计算的。
init/2
不过是在引导时改变配置的。嗯,在phoenix v1.3上是
init/2
吗?我在1.2.4中似乎没有这个功能。)