Rails: дифференцирование постановки из производства

У меня есть производственный сервер и студийный сегмент, в котором тестируются новые функции, прежде чем переносить их на производство. Промежуточный сервер физически отличается от производственного (разные хосты с разными URL-адресами), но он имитирует его как можно больше (т.е. Такие же пакеты, одни и те же драгоценные камни и т.д.).

Rails.env = 'production' на обоих серверах.

Моя проблема в том, что в некоторых случаях мне нужно другое поведение при постановке, чем в производстве.

Например, новая функция может отправлять массовые электронные письма пользователям при производстве; но пока я тестирую это, я бы предпочел, чтобы они отправили на учетную запись "test".

Каков наилучший способ обнаружения сервера, на котором я работаю?

Я хотел бы сделать это как "рейли", насколько это возможно.

Большое спасибо.

Ответ 1

Как правило, именно поэтому вы должны использовать разные среды. Практически говоря, промежуточная среда, как правило, очень близка к производству, но с такими вещами, как настоящие электронные письма, отключены.

Вы не ограничены разработкой/тестом/производством - вы можете запускать в среде с именем все, что хотите. Просто создайте файл config/environment/staging.rb, установите нужные вам значения и запустите приложение с помощью RAILS_ENV = staging - все, что вам нужно. Таким образом, вы можете эмулировать свою производственную среду, но включать или отключать функции по желанию, если вы не хотите, чтобы они были активными до того, как вы действительно перейдете в прямом эфире.

Ответ 2

Я боюсь, что этот ответ не очень полезен.

Способ railsy заключается в том, чтобы среда отличалась только конфигурацией (хозяин ресурсов, база данных и т.д.) для разных сред. Таким образом, другая база данных с пользователями, имеющими фиктивные или тестовые адреса электронной почты, будет самым простым способом для этого.

Если вы, как правило, клонируете от Production, я рекомендую обновлять электронные письма всех пользователей либо через script/dbconsole, либо script/console, либо просто простую задачу rake.

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