今天我調試Rails 5.0.1應用時,發現了以下意外問題。數據庫中有一位用戶,他的電子郵件地址爲[email protected]
。當我在生產環境中運行爲什麼Rails查詢區分大小寫而不是開發?
User.find_by(email: "[email protected]")
,我得到一個nil
回來。但是,如果我執行
User.find_by(email: "[email protected]")
它成功找到記錄。奇怪的是,當Rails應用程序在開發模式下運行時,這是不會發生的。我可以用[email protected]
或[email protected]
查詢,它總是找到記錄。
什麼可能導致Rails在生產中進行區分大小寫的搜索?數據庫是Postgres。所有這些都在同一臺機器上用相同的代碼進行測試。
更新2017年2月10日
不幸的是,這個問題重建我的發展環境後就走了。在閱讀了下面的一些評論之後,生產中區分大小寫的搜索是Postgres/Rails的預期行爲。目前還不清楚爲什麼我的開發環境(在同一臺機器上)執行不區分大小寫的搜索。我會更新,如果我發現任何更多的信息...
什麼是你的後端數據庫?即使正在運行完全相同的查詢,或者由於服務器默認值導致模式不同,版本也可能有所不同。例如,[用MySQL取決於整理](https://dev.mysql.com/doc/refman/5.7/en/case-sensitivity.html)。將開發表模式與您的生產模式進行比較並查找差異。 – tadman
在這種特殊情況下,一切都應該是一樣的。這是同一臺計算機,相同的後端數據庫(Postgres)。我通過運行所有遷移來以開發模式重新生成整個數據庫。然後我通過重新運行所有遷移來重新創建生產數據庫。但是,點了。我會看看我能否在兩者之間的決賽桌/模式中發現差異。 – CodeSmith
我只是在這裏提出建議,不能得出結論。這很可能是一個微妙的整理問題。您是否嘗試過工作數據庫的'pg_restore'以查看更改了哪些內容? – tadman