如何为heroku配置变量创建rails初始化程序?

时间:2012-07-06 04:32:57

标签: ruby-on-rails heroku actionmailer

我正在努力与Heroku在我的Rails应用程序中使用actionmailer发送gmail。

我已将我的gmail用户名和密码正确设置为Heroku配置变量,但我仍然会收到身份验证错误。我终于发现我需要创建一个初始化程序,但是我无法将所有内容挂钩。以下代码在heroku日志中显示正确的用户名和密码,但带有NoMethodError。不知道在哪里放置方法使它全部工作。我已经尝试将它放在我的users_controller中,但这会导致整个事情崩溃。

一旦我开始工作,我打算将我的S3内容添加到此初始化程序中。

我的初始值设定项/ heroku.rb

GMAIL_CREDENTIALS = { :username => ENV['GMAIL_USERNAME'],
  :password => ENV['GMAIL_PASSWORD'] }

my mailers / user_mailer.rb

class UserMailer < ActionMailer::Base
  default from: "mygmailaddress", :gmail_credentials => GMAIL_CREDENTIALS

  def signup_confirmation(user)
    @user = user
    mail to: user.email, subject: "Sign Up Confirmation"
  end
end

并在我的users_controller中创建:

def create
  @user = User.new(params[:user])
  if @user.save
    UserMailer.signup_confirmation(@user).deliver
    sign_in @user
    flash[:success] = "Welcome to Plain Vanilla!"
    redirect_to @user
  else
    render 'new'
  end
end

heroku日志中的错误消息:

Completed 500 Internal Server Error in 482ms
app/controllers/users_controller.rb:21:in `create'
NoMethodError (undefined method `encoding' for {:username=>"mygmailusername",
  :password=>"mypassword"}:Hash):

感谢您的帮助!

查理

1 个答案:

答案 0 :(得分:1)

我通常将我的gmail凭据放在名为mailer.rb的初始化程序中。它看起来像这样:

ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :domain               => "mail.google.com",
  :user_name            => ENV['MY_GMAIL_USER_NAME'],
  :password             => ENV['MY_GMAIL_PASSWORD'],
  :authentication       => "plain",
  :enable_starttls_auto => true
}

您从哪里获得了您正在使用的代码?我尝试从你的user_mailer中删除:gmail_credentials行,并使用更像我的初始化程序。如果您更改这些文件,请不要忘记重新启动应用程序。

希望这有帮助,