Что не так с Rails.env? - PullRequest
       1

Что не так с Rails.env?

1 голос
/ 15 сентября 2010

Сегодня я реализовал небольшой фрагмент кода, который включает аналитику только в производственной среде, используя что-то вроде:

<% if Rails.env.production? %>
  analytics here
<% end %>

Я не вижу в этом ничего плохого ... однако один из моих c0-работников сказал мне, что это не совсем хорошая практика, что это наверняка создаст проблемы на будущей фазе обслуживания, и это было гораздо лучше настроить константу в среде и сделать что-то вроде

<% if defined?(INCLUDE_ANALYTICS) && INCLUDE_ANALYTICS %>
  analytics here
<% end %>

Я не вижу такой большой разницы между этими двумя подходами, однако мне бы хотелось узнать, что другие разработчики думают об этом и как другие решат это лучше:)

Ответы [ 2 ]

3 голосов
/ 15 сентября 2010
  1. Если в блоке содержится другой код ruby, тогда Rails.env.production?здесь плохо, потому что вы теряете способность тестировать этот блок.Представьте, что вы используете внутри помощника, который может взорваться на некоторых страницах.Простые тесты контроллера с представлениями просто визуализируют чистый HTML без загрузки каких-либо внешних ресурсов и запуска JS, поэтому это не должно влиять на вашу статистику.Только тесты интеграции на основе браузера (Selenium) могут повлиять на статистику.

  2. INCLUDE_ANALYTICS - довольно хороший вариант, но таких констант в области приложения обычно слишком много.Лучший вариант - ввести файл конфигурации YAML .Это дает возможность определять несколько файлов конфигурации производства (основное производство, бета-производство без аналитики и т. Д.).После использования он помогает легко перенести другие настройки.

1 голос
/ 15 сентября 2010

Единственное отличие состоит в том, что второе решение позволит вам отключить отслеживание аналитики во время работы без изменения кода. Вы можете установить для INCLUDE_ANALYTICS значение false, и ваша аналитика не будет включена. Использование Rails.env.production?, безусловно, не является проблемой, но вы не можете изменить поведение приложения в рабочем режиме.

Подумайте о следующем примере: серверы вашего провайдера аналитики отключаются, а JavaScript, который отслеживает посещения, блокирует загрузку страницы в браузере. Ваш клиент хочет, чтобы аналитика была деактивирована, пока проблема не будет устранена. Используя ваше первое решение, вам нужно найти место внутри кода, удалить эту строку и развернуть приложение. Второй подход позволяет изменить глобальный файл конфигурации, и все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...