我正在使用EXRM作为Release Manager
我在我的prod.exs中添加了一个config
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
行中跳过check_origin
:
transport :websocket, Phoenix.Transports.WebSocket
然后,在您的端点模块的init/2
函数中,在开始时添加它:
config = Keyword.put(
config,
:check_origin,
Application.get_env(:my_app, :check_origin) |> Poison.decode!
)
在全新的凤凰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_origin
,则原点检查应返回到此配置变量。让我知道它是否有效,我没有测试该功能。