将环境变量用于haml部分中的Google Analytics(分析)跟踪ID

问题描述 投票:0回答:1

我正在尝试将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(分析)跟踪代码在每种环境下都是动态的(即提取环境变量)的最佳方法是什么?

谢谢!

ruby google-analytics haml partials
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.