我有一个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界面运行它才会出现问题时,Phussion Passenger或nginx是否会导致此类错误?
我尝试多次重启服务器,但无法弄清楚它为什么不起作用。据我所知,在生产网络服务器(例如,phusion乘客)中执行的命令与在生产控制台中执行的命令(例如RAILS_ENV=production rails c
)之间应该没有区别,我是否在这个假设中犯了错误?
我目前的想法是哪个用户正在运行命令ENV['EMAIL_USERNAME']
e.t.c.是在我的.zshrc中定义的,但是我认为这是由phussion乘客提供的,因为我的database.yml文件中有password: <%= ENV['POSTGRES_PASSWORD'] %>
...
任何想法都非常感激。
更多详情如下:
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
}
password_resets_controller.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_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>
通过单击Web界面上的按钮(通过password_reset_controller)运行它的结果:
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'
答案 0 :(得分:0)
找到了这个问题的解决方案,我忘记了环境变量是从/ etc / default / nginx读取的,而不是我的.zshrc,而且我需要将它们添加到。