аналитика если на производственной площадке, а не на локальном или героинском поддомене - PullRequest
0 голосов
/ 09 ноября 2010

Этот вопрос касается запуска сценария аналитики в одной из этих трех сред.

  1. mysite.heroku.com
  2. mysite-staging.heroku.com
  3. mysite.com - это единственный, на котором я хочу, чтобы он работал.

Вот так я планирую его выложить, но любые предложения приветствуются.

В моем помощнике

def render_analytics
  if local_request? || #on a Heroku subdomain 
     false
  else
     true
  end
end

В моем макете

<%= render 'shared/analytics' if render_analytics %>

render_analytics возвращает логическое значение: true если на mysite.com, false если local_request? или наподдомен Heroku (например: mysite.heroku.com || mysite-staging.heroku.com)

Так как я могу узнать, исходит ли он от Heroku.

1 Ответ

1 голос
/ 09 ноября 2010

Использование hostname:

if local_request? || `hostname` =~ /heroku/i

Более чистое решение - установить постоянную в вашей среде во время развертывания, которая позволит вам узнать, используете ли вы Heroku.Поскольку процесс развертывания Heroku довольно непрозрачен с точки зрения того, что вы можете работать с файлами конфигурации, ваш метод может запоминать результат, поэтому вы не выполняете системный вызов каждый раз при визуализации представления.

Iтолько что сделал нечто подобное с методом, который проверяет адаптер базы данных, чтобы учесть различия между моей средой разработки и Heroku.Вот мой lib/adapter.rb:

class Adapter
  cattr_reader :adapter

  def self.postgres?
    @@adapter ||= Rails.configuration.database_configuration[Rails.env]['adapter']
    adapter == 'postgresql'
  end

  def self.mysql?
    @@adapter ||= Rails.configuration.database_configuration[Rails.env]['adapter']
    adapter == 'mysql'
  end

  def self.sqlite?
    @@adapter ||= Rails.configuration.database_configuration[Rails.env]['adapter']
    adapter.include?('sqlite')
  end
end

Обратите внимание, что в дополнение к этому вы должны изменить application.rb таким образом, чтобы lib был добавлен к вашему пути автозагрузки:

config.autoload_paths += Dir["#{config.root}/lib/**/"] # include all subdirectories
...