2017-02-15 1 views
8

Ich erstellte eine Phoenix-App, dann das Bambus-Modul zum Senden von E-Mails hinzugefügt, und ich schickte erfolgreich meine erste E-Mail mit Elixir heute Nachmittag, aber ich musste den Benutzernamen hart codieren und Passwort in die config.exs.Wie lade ich Umgebungsvariablen für ein Phoenix Framework-Projekt

Ich lese this article und Richten Sie eine .env-Datei im Stamm meines Phönix-Projekts, und ich versuche, die Umgebungsvariablen mit den folgenden Anweisung (en), innerhalb der config.exs Datei zu laden.

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

Allerdings werden die E-Mails nicht gesendet, und Bambus gibt mir eine ziemlich kryptische Fehlermeldung.

Ich baue das Phoenix App den folgenden Befehl aus dem Terminal,

iex -S mix 

und ich manuell die E-Mails innerhalb einer iex Sitzung mit einem Befehl ähnlich den unten senden,

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

aber die E-Mails werden nur gesendet, wenn der Benutzername/das Passwort in der config.exs Datei fest codiert sind. Wie kann ich die Datei .env verwenden, die ich eingerichtet habe, damit ich den Benutzernamen/das Passwort nicht fest in die config.exs codieren muss?

Hinweis: Ich bin mit OS X und mit dem Fisch-Shell.

+2

Wenn Sie in 'iex' gehen und' System.get_env ("SMTP_USERNAME") eingeben, erhalten Sie den erwarteten Wert? Machen Sie dasselbe für das Passwort. –

+0

@JustinWood Der Befehl, den Sie vorgeschlagen haben, gibt 'nil' zurück. Und danke, dass du mich in die richtige Richtung gelenkt hast;) – Chris

Antwort

2

Ich beendete eine smtp.exs Datei innerhalb config Verzeichnisses zu schaffen, die wie das aussieht folgende,

smtp. EXS

use Mix.Config 

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

und dann hinzugefügt folgendes config.exs

import_config "smtp.exs"

Nun, wenn ich die Anwendung mit iex -S mix laden sie jedes Mal in diesen Anwendungsvariablen lädt, und ich habe nicht eine Umwelt Quelle Variable für jede Terminalsitzung.

0

Wie der Artikel, über den Sie geschrieben haben, verwende ich ENV vars für Phoenix von meinem System. schaffen sie nur über den Export:

export SMTP_USERNAME=you_variable

und so weiter und Phoenix wird sich ihnen und bekommen am Anfang der Serverzeit. Es ist auch möglich, .env-Datei zu verwenden, aber ich verwende es nur mit 'Heroku local'.

Überprüfen Sie dieses hex dotenv_elixir, aber es wirklich nicht Elixier Weg.

+0

Er gibt nicht an, ob er unter Windows oder Mac OSX/Linux arbeitet. Der Befehl würde "SET SMTP_USERNAME = your_variable" sein, wenn er nicht auf Windows ist. –

+0

Sie richtig, ich benutze MacOS mit "Export" – khusnetdinov

5

Sie können Confex-Modul in Ihrem Projekt verwenden. https://github.com/Nebo15/confex

Dies ist ein Hilfsmodul, das Ihnen die Möglichkeit bietet, die env-Konfiguration zur Laufzeit zu lesen.

config.exs Beispiel

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

In Ihrem Modul

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

In Ihrem iex Typ

System.put_env("SMTP_USERNAME", "real_username") 
System.put_env("SMTP_PASSWORD", "real_password")