仅在生产环境中使用设计更新电子邮件地址失败

时间:2012-08-27 05:08:42

标签: ruby-on-rails devise devise-confirmable

这个让我绝对疯狂。我测试了在开发和登台环境中更新用户的电子邮件地址,一切正常。它会更新unconfirmed_email字段并发送确认电子邮件地址。

但是,仅在生产环境中,它会失败!

在dev / staging环境中,当用户更新他/她的电子邮件地址时,我会看到以下语句。

User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1
Profile Load (0.3ms)  SELECT "profiles".* FROM "profiles" WHERE "profiles"."user_id" = 2 LIMIT 1
(0.1ms)  BEGIN
User Exists (0.6ms)  SELECT 1 FROM "users" WHERE ("users"."email" = 'aaaa@yahoo.com' AND "users"."id" != 2) LIMIT 1
(0.3ms)  UPDATE "users" SET "unconfirmed_email" = 'aaaa@yahoo.com', "updated_at" = '2012-08-27 04:22:10.470329' WHERE "users"."id" = 2
User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = 'jUcfXqMqDjeEsJ3TEKws' LIMIT 1
(0.3ms)  UPDATE "users" SET "unconfirmed_email" = 'aaaa@yahoo.com', "updated_at" = '2012-08-27 04:22:10.470329', "confirmation_token" = 'jUcfXqMqDjeEsJ3TEKws', "confirmation_sent_at" = '2012-08-27 04:22:10.473264' WHERE "users"."id" = 2

然而,在制作中,我看到以下内容。

User Load (6.7ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 5 LIMIT 1
Profile Load (2.1ms)  SELECT "profiles".* FROM "profiles" WHERE "profiles"."user_id" = 5 LIMIT 1
 (1.2ms)  BEGIN
User Exists (1.3ms)  SELECT 1 FROM "users" WHERE ("users"."email" = 'aaaa@yahoo.com' AND "users"."id" != 5) LIMIT 1
 (1.2ms)  ROLLBACK

还有一件奇怪的事。我可以在rails console中手动更新电子邮件地址.....

1.9.3p194 :005 > u.update_attributes(:email => "aaaa@yahoo.com")
(1.3ms)  BEGIN
User Exists (1.4ms)  SELECT 1 FROM "users" WHERE ("users"."email" = 'aaaa@yahoo.com' AND "users"."id" != 1) LIMIT 1
(1.4ms)  UPDATE "users" SET "unconfirmed_email" = 'aaaa@yahoo.com', "updated_at" = '2012-08-27 05:05:26.337961' WHERE "users"."id" = 1
User Load (1.4ms)  SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = 'Yyg98zno81adJt4mp7pG' LIMIT 1
(1.4ms)  UPDATE "users" SET "unconfirmed_email" = 'aaaa@yahoo.com', "updated_at" = '2012-08-27 05:05:26.337961', "confirmation_token" = 'Yyg98zno81adJt4mp7pG', "confirmation_sent_at" = '2012-08-27 05:05:26.342299' WHERE "users"."id" = 1
Profile Load (1.4ms)  SELECT "profiles".* FROM "profiles" WHERE "profiles"."user_id" = 1 LIMIT 1
(1.7ms)  COMMIT
=> true 

任何帮助将不胜感激!

谢谢,

1 个答案:

答案 0 :(得分:1)

我试图找出两种环境之间的差异 - 开发/分段与生产。由于分段和制作具有几乎相同的设置,我唯一能想到的就是缓存。所以,我将update_attributes行更改为以下内容并且它有效。

  if @user.reload.update_attributes(:email => params[:email])