【问题标题】:Devise Password Reset Failing设计密码重置失败
【发布时间】:2014-07-20 05:48:41
【问题描述】:

我的 Ruby on Rails 应用程序正在使用 Devise 来管理它的用户登录等。

我目前在使用密码重置功能时遇到问题。我已经让它在我们的本地环境中运行得很好,但是在生产服务器(在 Heroku 上)它失败了。

如果用户忘记密码,可以重置密码,系统会发送电子邮件,其中包含点击重置密码的链接。

单击此链接后,他们将成功进入该站点并要求输入新密码,然后进行确认。问题是一旦他们保存了这个密码,应用程序就会失败并显示标准的“应用程序错误 - 应用程序中发生错误并且您的页面无法加载”

查看heroku日志我可以看到以下内容

2014-05-30T12:38:15.373355+00:00 app[web.1]: Started PUT "/users/password" for xx.xxx.xxx.xxx at 2014-05-30 12:38:15 +0000
2014-05-30T12:38:15.377511+00:00 app[web.1]: Processing by Devise::PasswordsController#update as HTML
2014-05-30T12:38:15.377577+00:00 app[web.1]:   Parameters: {"utf8"=>"???", "authenticity_token"=>"3NjJhk3HcIgIkWy8hlmizOVTX5Wx3N9RgHmxwK5Evrg=", "user"=>{"reset_password_token"=>"[FILTERED]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Change my password"}
2014-05-30T12:38:31.727191+00:00 app[web.1]: E, [2014-05-30T12:38:31.726292 #2] ERROR -- : worker=0 PID:5 timeout (16s > 15s), killing
2014-05-30T12:38:31.797612+00:00 app[web.1]: E, [2014-05-30T12:38:31.797478 #2] ERROR -- : reaped #<Process::Status: pid 5 SIGKILL (signal
9)> worker=0
2014-05-30T12:38:31.800988+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=POST path=/users/password host=horsepip.com request_id=27d37c84-544f-4fe5-a12d-a7384dfb60c5 fwd="xx.xxx.xxx.xxx" dyno=web.1 connect=1ms service=16425ms status=503 bytes=0
2014-05-30T12:38:31.986995+00:00 heroku[router]: at=info method=GET path=/favicon.ico host=horsepip.com request_id=91e0f2a7-284a-4c85-a9e2-af3d404f1151 fwd="xx.xxx.xxx.xxx" dyno=web.1 connect=0ms service=2ms status=200 bytes=196
2014-05-30T12:38:32.312878+00:00 app[web.1]: I, [2014-05-30T12:38:32.312200 #1109]  INFO -- : worker=0 ready

我可以确定的是服务器工作者正在崩溃,并且查找其中一些错误我发现它们可能与 Unicorn Gem(我们正在使用的)有关

我们目前使用的是基本的 Heroku 包,因为我们的生产服务器目前使用的人并不多,但简单的密码重置肯定不会让工作人员崩溃吗?

我尝试通过设置页面更改用户密码,用户在该页面输入当前密码,然后输入新密码,这样可以很好地保存,没有任何问题。

有其他人对此有任何问题吗?

在调试模式下更新日志

2014-05-30T13:30:29.393026+00:00 app[web.1]: Processing by Devise::PasswordsController#update as HTML
2014-05-30T13:30:29.393096+00:00 app[web.1]:   Parameters: {"utf8"=>"???", "authenticity_token"=>"oj1WtMp7zU+5MRiCjdk47NeEwJYyZkB7w+FcTvgD1ik=", "user"=>{"reset_password_token"=>"[FILTERED]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Change my password"}
2014-05-30T13:30:29.389774+00:00 app[web.1]: Started PUT "/users/password" for xx.xxx.xx.xxx  at 2014-05-30 13:30:29 +0000
2014-05-30T13:30:30.045362+00:00 app[web.1]:   ←[1m←[36mUser Load (2.4ms)←[0m  ←[1mSELECT  "users".* FROM "users"  WHERE "users"."reset_password_token" = '0da2c26faa8c7a6a2935abf55b857590fdfc4b8bbb8ee90bfd5ad35c04f9e3ae'  ORDER BY "users"."id" ASC LIMIT 1←[0m
2014-05-30T13:30:30.136894+00:00 app[web.1]:   ←[1m←[36mSQL (1.7ms)←[0m  ←[1mUPDATE "users" SET "encrypted_password" = $1, "reset_password_sent_at" = $2, "reset_password_token" = $3, "updated_at" = $4 WHERE "users"."id" = 1←[0m  [["encrypted_password", "$2a$10$d2zQ6yuEb17QK2WtHmRk/ufQRhun1RO2ILJ16NJkL90T2JzbxciAq"], ["reset_password_sent_at", nil], ["reset_password_token", nil], ["updated_at", "2014-05-30 13:30:30.130959"]]
2014-05-30T13:30:30.130271+00:00 app[web.1]:   ←[1m←[35m (1.4ms)←[0m  BEGIN
2014-05-30T13:30:39.112542+00:00 app[web.1]:   ←[1m←[35m (6.9ms)←[0m  COMMIT
2014-05-30T13:30:39.159501+00:00 app[web.1]:   ←[1m←[35mSQL (5.3ms)←[0m  UPDATE "users" SET "current_sign_in_at" = $1, "last_sign_in_at" = $2, "reset_password_token" = $3, "sign_in_count" = $4, "updated_at" = $5 WHERE "users"."id" = 1  [["current_sign_in_at", "2014-05-30 13:30:39.133511"], ["last_sign_in_at", "2014-05-30 12:39:44.631269"], ["reset_password_token", "rZPXQ3r8D2easJmjzBox"], ["sign_in_count", 19], ["updated_at", "2014-05-30 13:30:39.147892"]]
2014-05-30T13:30:39.145115+00:00 app[web.1]:   ←[1m←[36m (5.0ms)←[0m  ←[1mBEGIN←[0m
2014-05-30T13:30:45.857557+00:00 app[web.1]: E, [2014-05-30T13:30:45.857376 #2] ERROR -- : worker=1 PID:8 timeout (16s > 15s), killing
2014-05-30T13:30:45.983703+00:00 app[web.1]: I, [2014-05-30T13:30:45.983379 #310]  INFO -- : worker=1 ready
2014-05-30T13:30:45.915630+00:00 app[web.1]: E, [2014-05-30T13:30:45.915530 #2] ERROR -- : reaped #<Process::Status: pid 8 SIGKILL (signal 9)> worker=1
2014-05-30T13:30:45.917905+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=POST path=/users/password host=xxxxx.com request_id=d7fb6561-950a-4dcb-8852-52c259985c99 fwd="78.16.33.137" dyno=web.1 connect=0ms service=16526ms status=503 bytes=0

【问题讨论】:

  • 您可以为服务器运行控制台实例并跟踪暂存/开发日志吗?然后你应该得到一些应用级的日志记录。
  • 啊是的好主意,我会试试看我能找到什么
  • 如果您仍然无法摆脱它,请在此处发布输出。
  • 我将日志模式更改为调试,因为 Heroku 将所有日志文件合并在一起,但它并没有真正给我更多信息,输出在上面
  • 惊人的 9 秒。 13:30:30 的 BEGIN 和 13:30:39 的 COMMIT 之间的延迟(中间什么都没有,这看起来很奇怪)。然后下一个 BEGIN 是在 13:30:39,系统在 6 秒后放弃并杀死工作人员,因为请求花费了超过 15 秒。问题是,为什么 BEGIN 和 COMMIT 之间会有这样的延迟?这是否发生在任何其他请求上? (如果不是很奇怪。)其他请求是否很慢但没有那么慢,因此因为它们只有一个 BEGIN..COMMIT 就可以解决这个问题吗?无论如何,数据库或与之交互的东西看起来很奇怪。

标签: ruby-on-rails ruby heroku devise


【解决方案1】:

最后发现,每次更新用户个人资料时,我们都会对图像进行密集裁剪。更新密码触发了这些图像的裁剪并导致工作人员失败

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2014-07-06
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    相关资源
    最近更新 更多