更新: 我通过heroku的网站实际访问我的应用程序发送电子邮件,但是当我从cloud9 ide中的生产服务器运行应用程序时,它仍然失败。这是正常的吗?这是教程要我这样做的方式吗?
在Michael Hartl的Ruby on Rails教程的第11章中,系统会要求您在部署模式下注册示例应用程序,并使用您控制的电子邮件,并检查您的电子邮件帐户是否有帐户激活电子邮件。我没有收到任何电子邮件和heroku报告的sendgrid插件没有发送电子邮件请求。但是,在cloud 9 ide puma服务器控制台中,它报告电子邮件以正确的格式发送到正确的地址,我可以从控制台检索激活令牌和电子邮件地址。我不确定我做错了什么。希望所有相关代码都包含在下面。请帮忙。
我实际上去了示例应用程序网站并点击注册然后等待电子邮件。这不是Hartl通过“注册生产中的新账户”的意思吗?
配置/ environment.rb中:
# Load the Rails application.
require_relative 'application'
# Initialize the Rails application.
Rails.application.initialize!
#Sendgrid configurations from their website
ActionMailer::Base.smtp_settings = {
:user_name =>ENV['SENDGRID_USERNAME'],
:password =>ENV['SENDGRID_PASSWORD'],
:domain => 'heroku.com',
:address => 'smtp.sendgrid.net',
:port => 587,
:authentication => :plain,
:enable_starttls_auto => true
}
寄件人/ application_mailer:
class ApplicationMailer < ActionMailer::Base
default from: 'noreply@example.com'
layout 'mailer'
end
环境/ production.rb:
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
host = 'gentle-lake-88943.herokuapp.com'
config.action_mailer.default_url_options = { host: host }
ActionMailer::Base.smtp_settings = {
:address => 'smtp.sendgrid.net',
:port => '587',
:authentication => :plain,
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
:domain => 'heroku.com',
:enable_starttls_auto => true
}
users_controller.rb:
def create
@user = User.new(user_params)
if @user.save
@user.send_activation_email
flash[:info] = "Please check your email to activate your account"
redirect_to root_url
else
render 'new'
end
end
user.rb:
def activate
update_columns(activated: true, activated_at: Time.zone.now)
end
def send_activation_email
UserMailer.account_activation(self).deliver_now
end
routes.rb中:
resources :account_activations, only: [:edit]
答案 0 :(得分:0)
我刚解决了本教程的问题。我最初的问题是我没有正确写出变量名。我查看了我的代码并修复了它。正如教程所说,我的应用现在工作正常。
正如Igor在他的最后一句话中所说,你在config / environments.rb中不需要任何特殊的代码,所以如果你保留它就应该删除它。
使用heroku run printenv
检查Heroku中的环境变量。如果这些是正确的,请尝试BAD方式,就像测试一样:用sendgrid的用户名和密码替换ENV['SENDGRID_xxx']
。