web-dev-qa-db-ja.com

フェニックスフレームワークプロジェクトの環境変数をロードするにはどうすればよいですか

Phoenixアプリを作成し、メールを送信するためのbambooモジュールを追加し、今日の午後にElixirを使用して最初のメールを正常に送信しましたが、ユーザー名passwordconfig.exsに挿入します。

この記事 を読み、フェニックスプロジェクトのルートに.envファイルを設定し、config.exs内で次のステートメントを使用して環境変数を読み込もうとしています。ファイル。

username: System.get_env("SMTP_USERNAME"),
password: System.get_env("SMTP_PASSWORD"),

ただし、電子メールは送信されておらず、bambooはかなり不可解なエラーメッセージを表示しています。

ターミナルから次のコマンドを使用してフェニックスアプリを構築しています。

iex -S mix

以下のようなコマンドを使用して、iexセッション内で手動でメールを送信しています。

CrjApi.Email.hello_text_email("[email protected]") |> CrjApi.Mailer.deliver_now

ただし、電子メールは、ユーザー名/パスワードがconfig.exsファイルにハードコードされている場合にのみ送信されます。設定した.envファイルを使用して、ユーザー名/パスワードをconfig.exsにハードコーディングする必要がないようにするにはどうすればよいですか?

注:OS Xを実行していて、fishShellを使用しています。

10
ipatch

configディレクトリ内に次のようなsmtp.exsファイルを作成することになりました。

smtp.exs

use Mix.Config

config :crj_api, CrjApi.Mailer,
  username: "foo",
  password: "secret_password"

次に、以下をconfig.exsに追加しました

import_config "smtp.exs"

これで、iex -S mixを使用してアプリケーションをロードすると、毎回これらのアプリケーション変数がロードされ、各ターミナルセッションのソース環境変数がありません。

2
ipatch

プロジェクトでconfexモジュールを使用できます。 https://github.com/Nebo15/confex

これは、実行時にenv構成を読み取るオプションを提供するヘルパーモジュールです。

config.exsの例

config :app_name,
  smtp_username:  {:system, "SMTP_USERNAME", "default_user_name"},
  smtp_password:  {:system, "SMTP_PASSWORD", "default_password"}

モジュール内

username = Confex.get(:app_name, :smtp_username)
password = Confex.get(:app_name, :smtp_password)

あなたのiexタイプに

System.put_env("SMTP_USERNAME", "real_username")
System.put_env("SMTP_PASSWORD", "real_password")
10
Oleg Samorai

あなたが書いた記事のように、私は自分のシステムのフェニックスにENV変数を使用しています。エクスポートで作成するだけです。

export SMTP_USERNAME=you_variable

などなど、Phoenixはそれらを取得し、サーバーの起動時に取得します。 .envファイルを使用することもできますが、私は「herokulocal」でのみ使用します。

この16進数を確認してください dotenv_elixir しかし、それは実際には秘薬の方法ではありません。

0
khusnetdinov

すべての環境変数を、たとえば.env.devまたは.env.prodという名前のファイルに入れることができます(.gitignoreファイルに.env.*を追加することを忘れないでください)。

export SMTP_DOMAIN=smtp.trumpy.xyz
export [email protected]
export SMTP_PASSWORD=donny123
export SMTP_PORT=587
...

そのファイルをロードし、Phoenixサーバーを実行します。

source .env.dev && mix phx.server

この構文を使用することを忘れないでください

port: {:system, "SMTP_PORT"},
username: {:system, "SMTP_USERNAME"},

これの代わりに

port: System.get_env("SMTP_PORT"),
username: System.get_env("SMTP_USERNAME"),

実行時にENV変数をロードするため。

0
Iwan B.