Ruby on rails rails电子邮件在生产中出错,生产控制台中未发生此错误

Ruby on rails rails电子邮件在生产中出错,生产控制台中未发生此错误,ruby-on-rails,passenger,actionmailer,Ruby On Rails,Passenger,Actionmailer,我有一个rails应用程序,在生产中存在电子邮件授权问题。错误是: Net::SMTPAuthenticationError (530-5.5.1 Authentication Required. Learn more at ): app/models/user.rb:53:in `send_password_reset' app/controllers/password_resets_controller.rb:15:in `create' 我的电子邮件设置是正确的,并且在登台和开发中都能正

我有一个rails应用程序,在生产中存在电子邮件授权问题。错误是:

Net::SMTPAuthenticationError (530-5.5.1 Authentication Required. Learn more at ):
app/models/user.rb:53:in `send_password_reset'
app/controllers/password_resets_controller.rb:15:in `create'
我的电子邮件设置是正确的,并且在登台和开发中都能正常工作。此外,在控制台中运行从生产服务器执行的命令也能正常工作

只有在通过我的生产服务器的web界面运行时,问题才会出现。Phusion Passenger或nginx是否有可能导致此类错误

我已经多次尝试重新启动服务器,但都不明白为什么它不工作。据我所知,在生产Web服务器(例如,phusion passenger)中执行的命令与在生产控制台(例如,
RAILS\u ENV=production RAILS c
)中执行的命令之间应该没有区别。我的假设是错的吗

我目前的想法是,哪个用户以
ENV['EMAIL_USERNAME']
e.t.c.的形式运行命令是在My.zshrc中定义的,但我假设这是由Phusion passenger提供的,因为我的database.yml文件中有一个
密码:

非常感谢您的任何想法

详情如下:

production.rb配置:

  config.action_mailer.default_url_options = {host: 'myhost.com' }

  ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :domain               => "myhost.com",
  :user_name            => ENV["EMAIL_USERNAME"],
  :password             => ENV["EMAIL_PWD"],
  :authentication       => "plain",
  :enable_starttls_auto => true
}
密码\u重置\u控制器.rb:

  ##
  # Sends password reset email
  def create
    user =User.find_by_email(params[:email])
    user.send_password_reset if user
    redirect_to root_url, notice: "Email sent with password reset instructions."
  end
使用
RAILS\u ENV=production RAILS c在生产服务器上的终端上运行这些行的结果:

[4] pry(main)> user =User.find_by_email(params[:email]); user.send_password_reset if user
  Rendered user_mailer/password_reset.html.erb (1.5ms)
  Rendered user_mailer/password_reset.html.erb (1.5ms)
  Rendered user_mailer/password_reset.text.erb (2.3ms)
  Rendered user_mailer/password_reset.text.erb (2.3ms)

Sent mail to email@address.net (1984.9ms)

Sent mail to email@address.net (1984.9ms)
Date: Mon, 03 Mar 2014 12:34:32 +0000
<snipped message content>

找到了这个问题的解决方案,我忘记了环境变量是从/etc/default/nginx读取的,而不是从my.zshrc读取的,我需要在那里添加它们

App 1395 stdout:   Rendered user_mailer/password_reset.html.erb (0.5ms)
App 1395 stdout:   Rendered user_mailer/password_reset.text.erb (0.5ms)
App 1395 stdout: 
App 1395 stdout: Sent mail to email@address.net (188.8ms)
App 1395 stdout: Completed 500 Internal Server Error in 231ms
App 1395 stdout: 
App 1395 stdout: Net::SMTPAuthenticationError (530-5.5.1 Authentication Required. Learn more at
App 1395 stdout: ):
App 1395 stdout:   app/models/user.rb:53:in `send_password_reset'
App 1395 stdout:   app/controllers/password_resets_controller.rb:15:in `create'