2012-08-27 27 views
0

這是一個讓我絕對瘋狂。我測試了在開發環境和臨時環境中更新用戶的電子郵件地址,並且它一切正常。它更新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" = '[email protected]' AND "users"."id" != 2) LIMIT 1 
(0.3ms) UPDATE "users" SET "unconfirmed_email" = '[email protected]', "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" = '[email protected]', "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" = '[email protected]' AND "users"."id" != 5) LIMIT 1 
(1.2ms) ROLLBACK 

還有一件奇怪的事情。我可以手動更新電子郵件地址在滑軌控制檯.....

1.9.3p194 :005 > u.update_attributes(:email => "[email protected]") 
(1.3ms) BEGIN 
User Exists (1.4ms) SELECT 1 FROM "users" WHERE ("users"."email" = '[email protected]' AND "users"."id" != 1) LIMIT 1 
(1.4ms) UPDATE "users" SET "unconfirmed_email" = '[email protected]', "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" = '[email protected]', "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 

任何幫助將不勝感激!

感謝,

+0

如果沒有看到您的代碼,很難說出了什麼問題。 – Mischa

回答

1

我試圖找出差異是兩個環境之間是什麼 - 開發/分期與生產。由於分期和製作具有幾乎相同的設置,我唯一能想到的就是緩存。所以,我將update_attributes行更改爲以下版本,並且工作正常。

if @user.reload.update_attributes(:email => params[:email]) 
相關問題