今天,我实施了一小段代码,仅在生产环境中使用以下内容进行分析:
<% if Rails.env.production? %>
analytics here
<% end %>
我没有看到任何错误......但是我的一位工作人员告诉我,这根本不是一个好的做法,它肯定会在未来的维护阶段引入问题,那就是更好地在环境中设置常量并执行类似
的操作<% if defined?(INCLUDE_ANALYTICS) && INCLUDE_ANALYTICS %>
analytics here
<% end %>
我没有看到这两种方法之间存在如此大的差异,但我希望看到其他开发人员对此有何看法以及其他方式如何以更好的方式解决这个问题:)
答案 0 :(得分:3)
如果块中包含另一个ruby代码,那么Rails.env.production?这是不好的,因为你失去了测试该块的能力。想象一下,你使用的帮助器可能会在某些页面上爆炸。使用视图进行简单的控制器测试只需渲染纯HTML而无需加载任何外部资源并运行JS,因此它不会影响您的统计信息。只有基于浏览器的集成测试(Selenium)可能会影响统计数据。
INCLUDE_ANALYTICS是一个很好的选择,但通常在应用程序范围内有太多这样的常量。更好的选择是引入YAML configuration file。它提供了定义多个生产配置文件的能力(主要生产,没有分析等的beta生产......)。使用后,它有助于轻松外化其他设置。
答案 1 :(得分:1)
唯一的区别是,第二个解决方案可让您在生产过程中停用分析跟踪,而无需更改代码。您可以将INCLUDE_ANALYTICS设置为false,并且不会包含分析。使用Rails.env.production?
肯定不是问题,但在生产模式下,您无法更改应用程序的行为。
考虑以下示例:分析提供程序的服务器关闭,跟踪访问的JavaScript阻止浏览器中的页面加载。您的客户希望分析停用,直到问题得到解决。使用您的第一个解决方案,您需要在代码中找到该位置,删除该行并部署该应用程序。第二种方法允许您更改全局配置文件,一切正常。