tyb*_*103 2 activerecord development-environment ruby-on-rails
由于Rail的生产和开发环境之间存在差异,我今天遇到了一个可怕的问题.考虑一下代码:
"select * from subscription_plans where affiliate_id is null or affiliate_id = #{@subscription_plan.affiliate.id rescue 0};"
Run Code Online (Sandbox Code Playgroud)
永远不会有任何id为0的关联公司,所以如果@ subscription_plan.affiliate是nill,我希望查询只返回没有关联公司的订阅计划.在开发环境中工作得很好,因为nil.id会抛出一个错误(前提是它确实给出了一些关于它的消息应该是错误的4).问题是,我将该代码实时推送到我的生产服务器,并且affiliate_id为4的订阅计划开始全部显示.在生产中,nil.id不会抛出错误,而是简单地返回4. Geez,谢谢rails.
所有这些问题,作为Rails开发人员,我应该注意哪些其他事项?特别是,环境之间是否存在可能导致问题的其他差异?
生产和开发之间的所有不同都是可配置的.如果你想要nil生产中的whiny ,请将其添加到您的production.rb文件中:
# Log error messages when you accidentally call methods on nil.
config.whiny_nils = true
Run Code Online (Sandbox Code Playgroud)
只要看看你config/environments/production.rb和config/environments/development.rb文件以及阅读的方法/属性的注释和文档被使用.在我的头顶,这里有一些差异:
Time.now或1.day.ago或任何在按预期工作,他们将不会在生产工作的发展.debug 生产中将忽略级别日志消息.可能还有更多,但如果你只是查看配置文件,你应该知道差异是什么.
此外,简短的代码批评:
rescue foo模式通常是一个坏主意.可能已经引发的合法错误将被忽略.#{}.| 归档时间: |
|
| 查看次数: |
3784 次 |
| 最近记录: |