2017-07-21 3 views
0

Phoenix.Tokenを使用してトークンに署名して検証するPhoenixアプリケーションがあります。MixタスクでPhoenix.Tokenを使用しようとしたときにエラーが発生しました

これはアプリ自体でうまくいきますが、Phoenix.Tokenをミックスタスクから使用しようとすると奇妙なエラーが発生します。ここで

は、最小限の例です:私はこのタスクを実行すると

defmodule Mix.Tasks.SignSomething do 
    use Mix.Task 
    alias MyApp.Endpoint 

    @shortdoc "sign something" 

    def run(_args) do 
    IO.inspect Phoenix.Token.sign(Endpoint, "key", "val") 
    end 
end 

は、私は以下を参照してください。

** (ArgumentError) argument error 
    (stdlib) :ets.lookup(MyApp.Endpoint, :secret_key_base) 
    lib/phoenix/endpoint.ex:505: Mealthy.Web.Endpoint.config/2 
    (phoenix) lib/phoenix/token.ex:201: Phoenix.Token.get_endpoint_key_base/1 

は、これは私が:secret_key_baseを設定していないことを意味すると表示されますが、それは真実ではありません。それはconfig.exsにあり、それを設定した直後のIO.putsならば、その出力が見えます。

これを修正するにはどうすればよいですか?

答えて

3

スタートのApp

のMichałMuskałaはElixirのスラックに私のためにこの質問に答えました。彼は言った:

をエンドポイントが

ETS引数エラーはかなりうるさいです:(

一つの解決策、彼が指摘したように開始されていないため、ETSテーブルは、開始されていない、とありますこのようにアプリを起動します。

Mix.Task.run("app.start") 

だからタスクは次のようになります。

defmodule Mix.Tasks.SignSomething do 
    use Mix.Task 
    alias MyApp.Endpoint 

    @shortdoc "sign something" 

    def run(_args) do 
    Mix.Task.run("app.start") # added this 
    IO.inspect Phoenix.Token.sign(Endpoint, "key", "val") 
    end 
end 

アプリケーションを起動すると、タスクはPhoenix.Token機能に依存する他の機能を呼び出すことができます。

関連する問題