2012-05-10 6 views
6

Railsコンソールでenv変数にアクセスすることはできません。私はconfig/initializers/mail.rbexport SENDGRID_PASSWORD="123"RailsコンソールとPowの環境変数

を持って.powenv

があります:

ActionMailer::Base.smtp_settings = { 
    :password => ENV['SENDGRID_PASSWORD'] 
} 

私はUserMailer.welcome_mail.deliverを入力するときに、コンソールにエラー '例外ArgumentErrorが:SMTP-AUTHは要求されたが、秘密のフレーズを逃す' があります。しかし、アプリケーションからは、メールを正常に送信します。

コンソールでenv変数を使用できるようにするにはどうすればよいですか?

+0

明示的にコンソールで設定しようとしましたか? SENDGRID_PASSWORD = 123 && UserMailer.welcome_mail.deliver –

+0

いいえ、この方法でも動作しません。 –

+1

err意味: 'SENDGRID_PASSWORD = 123 rails console' –

答えて

4

あなたのRailsコンソールは捕虜レールに.powenvまたは.powrcファイルから情報を渡すための環境変数にアクセスすることができません... Railsは、独自にそれらのファイルを読みません。

つまり、.powenvファイルのENV['SENDGRID_PASSWORD']変数を設定していますが、Railsコンソールの起動時にそのファイルには触れていません。

あなたはENV['SENDGRID_PASSWORD'](またはあなたのRailsアプリでそのbefore_filter内から.powenvファイルの読み込みの他、同様の、方法を考え出す)を設定し、アプリケーションのコントローラでbefore_filterを設定する必要があります。

+0

"(またはRailsアプリケーションのbefore_filter内から.powenvファイルを読み込む別の同様の方法を思いついて) "うん、これはすばらしいだろう... :) 何か案は? –

+0

Railsアプリケーションから実際に '.powenv'ファイルを読みたいのかどうかは分かりません。なぜなら、毎回リロードする必要がない/別のものがあるからです。 –

+0

'.powenv'ファイルがスーパークリーンで、各行が単に環境変数を設定している場合は、' before_filter'内で行単位で読むことができるかもしれません。 'before_filter'は、ファイルから読み込んだ各行を実行することができます。 ...私は確かに、このアイデアで何か間違ったことが起こっていると確信しています。 –

11

は、後世のために

2

(ドットが現在の環境でスクリプトを実行するコマンドである)

rails c 

その後、

. .powenv 

を試してみてください、あなたはあなたの環境のいずれかに、このようなものを追加することができます。 rb、development.rb、または必要なロード順序に応じてイニシャライザ(config/initializers/pow.rb)を指定します。

 
# Load pow environment variables into development and test environments 
if File.exist?(".powenv") 
    IO.foreach('.powenv') do |line| 
    next if !line.include?('export') || line.blank? 
    key, value = line.gsub('export','').split('=',2) 
    ENV[key.strip] = value.delete('"\'').strip 
    end 
end