Ruby on rails RubyonRails教程-第11章-在开发中使用身份验证,但不在生产中使用
我正在学习Michael Hartl的ruby on rails教程,目前正在学习电子邮件身份验证(第11章) 我已经完成了本章中的所有内容,所有内容在开发环境中都能完美运行,但当我与Heroku一起投入生产时,我遇到了一个bug 预期:新用户提交帐户创建表单后,应将其发送回root_url,并发送一条闪光消息,要求其检查电子邮件以进行身份验证 实际行为:新用户提交帐户创建表单后,他们似乎被路由到/users,出现错误(错误为:很抱歉,出现了问题,请检查日志) 同样,这在dev中非常有效,只是在生产中没有 我所尝试的: -我检查了日志,可以看到电子邮件已按预期生成 -我在Heroku中运行了一个控制台,可以看到新用户是在数据库中正确创建的,并且其身份验证字段被正确设置为false(等待电子邮件) -我可以从日志中拉出身份验证链接并将其放在浏览器中,这样就可以看到它正确地验证了用户的身份 -我检查了用户模型和用户控制器,但看不到任何错误(希望测试套件能够在dev中捕获它们,或者错误会在dev中重现) -我重置了heroku数据库,并重新运行了迁移和db:seed,看看这是否有帮助,没有变化 -我再次推了一下Heroku,看看那里是否出了问题——没有变化 -我试图删除Heroku中的插件并重新安装,但这样做显然会禁止我的Sendgrid帐户…所以我强烈建议你不要这样做。我现在正在使用Sendgrid重新激活 附件是Heroku日志中的错误,我可以找到: 2020-04-08T16:52:25.985006+00:00应用程序[web.1]:----==\u mimepart\u 5e8e0149d677d\u b2b0ebb83ed445621b-- 2020-04-08T16:52:25.985006+00:00应用程序[网站1]: 2020-04-08T16:52:25.985363+00:00应用程序[web.1]:I[2020-04-08T16:52:25.985276#11]信息--:[f4baf186-2987-4d21-bd92-c8324b3a09ca]在716ms内完成了500个内部服务器错误(ActiveRecord:6.2ms |分配:5310) 2020-04-08T16:52:25.986654+00:00应用程序[web.1]:F[2020-04-08T16:52:25.986541#11]致命--:[f4baf186-2987-4d21-bd92-c8324b3a09ca] 2020-04-08T16:52:25.986655+00:00应用程序[web.1]:[f4baf186-2987-4d21-bd92-c8324b3a09ca]网络::SMTPAuthenticationError(535身份验证失败:帐户已禁用) 2020-04-08T16:52:25.986655+00:00应用程序[web.1]:): 2020-04-08T16:52:25.986655+00:00应用程序[web.1]:[f4baf186-2987-4d21-bd92-c8324b3a09ca] 2020-04-08T16:52:25.986656+00:00应用程序[web.1]:[f4baf186-2987-4d21-bd92-c8324b3a09ca]应用程序/模型/用户。rb:53:inRuby on rails RubyonRails教程-第11章-在开发中使用身份验证,但不在生产中使用,ruby-on-rails,heroku,Ruby On Rails,Heroku,我正在学习Michael Hartl的ruby on rails教程,目前正在学习电子邮件身份验证(第11章) 我已经完成了本章中的所有内容,所有内容在开发环境中都能完美运行,但当我与Heroku一起投入生产时,我遇到了一个bug 预期:新用户提交帐户创建表单后,应将其发送回root_url,并发送一条闪光消息,要求其检查电子邮件以进行身份验证 实际行为:新用户提交帐户创建表单后,他们似乎被路由到/users,出现错误(错误为:很抱歉,出现了问题,请检查日志) 同样,这在dev中非常有效,只是在
send_activation_email'
2020-04-08T16:52:25.986656+00:00应用程序[web.1]:[f4baf186-2987-4d21-bd92-c8324b3a09ca]应用程序/控制器/用户/控制器。rb:22:in
create'
2020-04-08T16:52:25.997396+00:00 heroku[路由器]:at=info method=POST path=“/users”host=午后-dawn-31172.herokuapp.com请求\u id=f4baf186-2987-4d21-bd92-c8324b3a09ca-fwd=“72.38.16.251”dyno=web.1 connect=0ms服务=724ms状态=500字节=1891协议=https
非常感谢您的帮助
附件是SMTP服务器设置,以防出现问题
`
在您所附的日志中,您可以找到以下片段: Net::SMTPAuthenticationError(535身份验证失败:帐户已禁用2020-04-08T16:52:25.986655+00:00应用程序[web.1]:) 这意味着SMTP(发送电子邮件的服务)的身份验证不好。因此,您应该在这里检查SMTP配置。也许有一条规则只为开发环境设置配置 谢谢你的帮助 考虑到SENDGRID给我带来的麻烦,包括我试图通过删除/重新安装Heroku插件来完全禁止自己使用SENDGRID,我决定将SMTP改为Google 这很容易做到,而且第一次就奏效了 注意:请记住在设置SMTP之前设置两步验证,并生成特定于应用程序的密码
再次感谢所有发表评论的人。我完全通过了相同的问题,所有这些步骤现在都完成了!尽管你已经用另一种方式解决了这个问题,但以下是如何为其他迈克尔·哈特尔的读者解决这个问题:
- 当我试图重新安装插件时,Sendgrid坏连接也被禁止了!我在Sendgrid.com上创建了一个新的Sendgrid帐户,并向支持部门发送了一份SOS。在12小时内,他们用我的heroku登录名修复了我的访问权限:)
- 然后我在sendgrid.com上创建了一个API密钥,并用它配置了heroku:
heroku配置:设置SENDGRID\u API\u KEY=my\u API\u KEY
- 在config/environment/production.rb中:
- 我还添加了“sendgrid ruby”宝石
这个过程在这里有详细说明:只要在迈克尔的书中写下这个,以防有人碰到同样的问题。Heroku目前似乎不支持SENDGRID加载项,或者您必须设置API密钥并做更多不必要的工作。通过使用MailGun服务而不是SENDGRID解决了这个问题。你所要做的就是:
$heroku addons:create mailgun:starter
config.action\u mailer.perform\u caching=false
主机='.herokuapp.com'
config.action_mailer.default_url_options={host:{host}
config.action\u mailer.delivery\u method=:smtp
config.action\u mailer.perform\u deliveries=true
config.action\u mailer.smtp\u设置={
:user_name=>ENV['MAILGUN_SMTP_LOGIN'],
:密码=>
config.action_mailer.delivery_method = :smtp
host = 'afternoon-dawn-31172.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
} `
config.action_mailer.perform_deliveries = true
config.action_mailer.default_url_options = { host: host, protocol: 'https' }
ActionMailer::Base.smtp_settings = {
user_name: ENV['SENDGRID_USERNAME'],
password: ENV['SENDGRID_PASSWORD'],
domain: 'staticpages-pg.herokuapp.com',
address: 'smtp.sendgrid.net',
port: 587,
authentication: :plain,
enable_starttls_auto: true
}
config.action_mailer.perform_caching = false
host = '<yourHerokuApp>.herokuapp.com'
config.action_mailer.default_url_options = {host: "#{host}"}
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.smtp_settings = {
:user_name => ENV['MAILGUN_SMTP_LOGIN'],
:password => ENV['MAILGUN_SMTP_PASSWORD'],
:domain => "<yourHerokuApp>.heroku.com",
:address => 'smtp.mailgun.org',
:port => 587,
:authentication => :plain,
:enable_starttls_auto => true
}