Phoenixアプリを作成し、メールを送信するためのbambooモジュールを追加し、今日の午後にElixirを使用して最初のメールを正常に送信しましたが、ユーザー名とpasswordをconfig.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を使用しています。
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
を使用してアプリケーションをロードすると、毎回これらのアプリケーション変数がロードされ、各ターミナルセッションのソース環境変数がありません。
プロジェクトで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")
あなたが書いた記事のように、私は自分のシステムのフェニックスにENV変数を使用しています。エクスポートで作成するだけです。
export SMTP_USERNAME=you_variable
などなど、Phoenixはそれらを取得し、サーバーの起動時に取得します。 .envファイルを使用することもできますが、私は「herokulocal」でのみ使用します。
この16進数を確認してください dotenv_elixir しかし、それは実際には秘薬の方法ではありません。
すべての環境変数を、たとえば.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変数をロードするため。