今天我调试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