如何在 Haml 部分中为 Google Analytics 跟踪 ID 使用环境变量

How to use an environment variable for Google Analytics tracking ID in a Haml partial

我正在尝试将 Google Analytics 标记添加到我的 Web 应用程序,该应用程序在 Rails 上运行 Ruby。

我想将相同的代码部署到多个环境、开发、暂存、生产,并在每个实例中通过环境变量配置不同的 Google Analytics 跟踪 ID。我的每个环境都设置在不同的域上,因此我在 Google Analytics 中设置了单独的属性,并在服务器上设置了一个新的环境变量 (GOOGLE_ANALYTICS_TRACKING_ID)。

我想使用部分 Haml 文件来保存 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', 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 的参数传入。我在撰写问题并使用不同的语法进行迭代时想出了这个解决方案。它有效,但我不确定它是否是最佳解决方案。关于如何实现此目标的任何其他建议 objective,即将相同的代码部署到不同的实例并分别跟踪分析?