我正在尝试将Google Analytics(分析)标记添加到运行Ruby on Rails的Web应用程序中。
我希望能够将相同的代码部署到多个环境(例如dev,staging,prod),并能够在每个实例中通过环境变量配置不同的Google Analytics(分析)跟踪ID。请注意,我的每个环境都在不同的域中设置,因此我在Google Analytics(分析)中设置了单独的属性,并在服务器上设置了新的环境变量(GOOGLE_ANALYTICS_TRACKING_ID)。
我想使用部分haml文件来保存Google Analytics(分析)标记并使用环境变量。我在this answer中找到了一个示例,但我不知道如何在其中传递环境变量。
app / views / stubs / _ga.haml
:javascript
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', GOOGLE_ANALYTICS_TRACKING_ID_ENV_VAR, 'auto');
ga('send', 'pageview');
app / views / layouts / base.html.haml
%html
%head
= stylesheet_link_tag 'application', media: 'all'
= javascript_include_tag 'application'
= render 'stubs/ga'
%body
= yield
请注意,我已将GOOGLE_ANALYTICS_TRACKING_ID_ENV_VAR
用作占位符。我已经尝试了几种表示形式,但无法使跟踪代码正常工作。 Google Tag Assistant Chrome扩展程序报告在页面上未找到标签,并且在浏览器控制台中看到语法错误。
构造部分代码和渲染调用以确保Google Analytics(分析)跟踪代码在每种环境下都是动态的(即提取环境变量)的最佳方法是什么?
谢谢!
这里是一种可能的解决方案:
app / views / stubs / _ga.haml
:javascript
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', '#{env['GOOGLE_ANALYTICS_TRACKING_ID']}', 'auto');
ga('send', 'pageview');
app / views / layouts / base.html.haml
%html
%head
= stylesheet_link_tag 'application', media: 'all'
= javascript_include_tag 'application'
= render 'stubs/ga', :env => ENV
%body
= yield
注意,我将ENV
作为参数传递给render
。在提出问题并使用不同的语法进行迭代时,我想到了这种解决方案。它有效,但是我不确定这是否是最佳解决方案。关于如何实现此目标的其他建议,即将相同的代码部署到不同的实例并分别跟踪分析?