【问题标题】:How to use an environment variable for Google Analytics tracking ID in a Haml partial如何在 Haml 部分中为 Google Analytics 跟踪 ID 使用环境变量
【发布时间】:2020-04-20 10:44:18
【问题描述】:

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

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

我想使用部分 Haml 文件来保存 Google Analytics 标记并使用环境变量。我在“Cant get google analytics working on rails project”中找到了一个例子,但是不知道如何传入环境变量。

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(分析)跟踪代码对于每个环境都是动态的并引入环境变量的最佳方式是什么?

【问题讨论】:

标签: ruby google-analytics haml partials


【解决方案1】:

这是一种可能的解决方案:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2012-04-23
    • 2019-08-26
    相关资源
    最近更新 更多