0

Railsアプリでアクションメーラーを使用してGmailを送信するHerokuに苦労しています。

Gmail のユーザー名とパスワードを Heroku 構成変数として正しく設定しましたが、それでも認証エラーが発生します。イニシャライザを作成する必要があることを最終的に発見しましたが、すべてを接続するのに問題があります。次のコードは、heroku ログに正しいユーザー名とパスワードを表示しますが、NoMethodError が発生します。すべてを機能させるためのメソッドをどこに配置すればよいかわかりません。users_controller に入れてみましたが、全体がクラッシュします。

これが機能するようになったら、S3 のものをこの初期化子に追加する予定です。

私の初期化子/heroku.rb

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

私のメーラー/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):

助けてくれてありがとう!

チャーリー

4

1 に答える 1

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 行を削除し、私のような初期化子を使用してみます。これらのファイルを変更した場合は、忘れずにアプリを再起動してください。

お役に立てれば、

于 2012-07-06T05:50:19.773 に答える