config.exs
またはdev.exs/prod.exs/test.exs
のサードパーティ製モジュールを使用している場合、phoenixの設定ファイルがロードされてコンパイルされる方法が問題になります。Elixir/Phoenix:設定ファイルでサードパーティのモジュールを使用するには?
例:JWT認証用にGuardianを設定するには、config.exs
にJOSE.JWK
モジュールをJWK作成/ロード用に使用しようとしています。私はiex -S mix phoenix.server
でコンソールに問題なくモジュールを使用できます。それはもちろん依存関係としてインストールされます。私は取得していますエラーが
** (Mix.Config.LoadError) could not load config config/config.exs
** (UndefinedFunctionError) undefined function JOSE.JWK.from_file/2 (module JOSE.JWK is not available)
ですこれは、私は無名関数でJOSE.JWK.from_file/2
への呼び出しをラップしたときにそれは働く私のconfig.exsのコード
# Configure Guardian for JWT Authentication
config :guardian, Guardian,
allowed_algos: ["HS512"], # optional
verify_module: Guardian.JWT, # optional
issuer: "MyApp",
ttl: { 30, :days },
verify_issuer: true, # optional
secret_key: System.get_env("GUARDIAN_KEY_PASSPHRASE") |> JOSE.JWK.from_file(System.get_env("GUARDIAN_KEY_FILE")),
serializer: MyApp.GuardianSerializer
です。しかし、もちろんGuardian.configの値(:secret_keyには)その後、匿名関数自体ではなく、その戻り値である:ガーディアンは、この設定値のための機能を受け入れるため、
# Configure Guardian for JWT Authentication
config :guardian, Guardian,
allowed_algos: ["HS512"], # optional
verify_module: Guardian.JWT, # optional
issuer: "MyApp",
ttl: { 30, :days },
verify_issuer: true, # optional
secret_key: fn -> System.get_env("GUARDIAN_KEY_PASSPHRASE") |> JOSE.JWK.from_file(System.get_env("GUARDIAN_KEY_FILE")) end,
serializer: MyApp.GuardianSerializer
これは、この例ではokです。しかし、私はこれが問題になる可能性のある他の状況を想像することができます。
この制限はありますか?何か不足していますか?これを回避する方法はありますか?
依存関係ではなく、アプリケーション自体から関数にアクセスするのと同じ質問が適用されます。これはhttps://github.com/trenpixster/addict/issues/105で痛みを引き起こしています –
本当ですか? 'config:my_app、MyApp.Endpoint、'はどのように動作しますか? – asiniy
@asiniy 'MyApp.Endpoint'は単なるアトムです。それが 'MyApp.Endpoint.foo()'だった場合は、関数呼び出しであり、コンパイルするためには依存モジュールが必要です。 – Emil