2017-11-22 4 views
0

에 check_origin 설정피닉스 프레임 워크 웹 소켓, 나는 릴리스 관리자로 exrm 사용하고 런타임

나는 내가 런타임에 환경 변수 'check_origin'

config :my_app, check_origin: "${CHECK_ORIGIN}" 
을 retreive 수 있습니다 내 prod.exs의 설정을 추가 한

문제는 웹 소켓 그래서 나는 같은 것을 할 수 없습니다

transport :websocket, Phoenix.Transports.WebSocket 

로 컴파일시에 구성되어 있다는 것입니다 :

transport :websocket, Phoenix.Transports.WebSocket, check_origin: Application.get_env(:my_app, :check_origin) |> Poison.decode! 
내가 런타임에 웹 소켓의 전송을 구성하는 방법

사람이 알고 있나요, 그래서

편집 (인코딩 된 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]) 
...... 
+0

Distillery에는 사용자가 설정할 수있는'REPLACE_OS_VARS = true' 환경 변수가 있으며 시작시 구성에서 환경 변수를 대체합니다. exrm에서 비슷한 것을 찾고자 시도했는데 (RELX_REPLACE_OS_VARS라고 부르는 것 같습니다) : https://github.com/bitwalker/exrm/blob/417286f13aebb4a19bee39bfdb4cd44b41d18f5f/priv/rel/files/boot – Lachezar

+0

넵 , 시작시 ... 내 문제는 websocket의 전송 설정이 컴파일시 ... – TheSquad

답변

0

다음 작업을해야합니다 :

먼저, check_origin를 건너 transport 라인 :

transport :websocket, Phoenix.Transports.WebSocket 

그런 다음, 엔드 포인트 모듈의 init/2 기능에서 시작이 추가 :

iex(1)> FooWeb.Endpoint.config :check_origin 
false 
: 새로운 피닉스 1.3 응용 프로그램에서

config = Keyword.put(
    config, 
    :check_origin, 
    Application.get_env(:my_app, :check_origin) |> Poison.decode! 
) 

,이 수

다음을 추가 한 후 init/2 :

config = Keyword.put(config, :check_origin, true) 

내가 얻을 : 그것은 전송의 설정에 check_origin을 찾을 수없는 경우

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

source code에 따르면, 원산지 검사가 다시이 설정 변수에 떨어질 것이다. 그래도 작동하는지 알려주세요. 기능을 테스트하지 않았습니다.

+0

사실, 이미 시도했는데 ... Application.put_env를 사용하여 : my_app 끝점 구성 ... 그렇지 않습니다. check_origin이 나중에 엔드 포인트 설정에서 올바르게 설정되었지만 엔드 포인트 check_origin에서 폴백 (fallback) 된 것처럼 보입니다 ... 또는 뭔가를 놓친 경우, 제 마음을 위해서 다시 시도 할 것입니다 – TheSquad

+0

제 편집에서 이미 시도한 것입니다 ... 같은 생각이지만, 작동하지 않는 것 같다 :-( – TheSquad

+0

끝점의 init에서 그렇게한다면? – TheSquad