Развертывание приложения rails в нескольких местах - PullRequest
0 голосов
/ 29 мая 2009

Я пытаюсь развернуть одно и то же приложение rails в двух разных местах с разными именами приложений, разными логотипами, разными таблицами стилей и т. Д.

У меня есть код, работающий на основе APP_NAME и переменной HOST_NAME, которую я храню в environment / production.rb. Теперь мне нужно развернуть его, и мне нужно лучшее решение, чем ручное редактирование файла среды на рабочем компьютере.

Единственный способ увидеть это - создать новую производственную среду - например, production_app2 - и по-разному определяйте в них APP_NAME и HOST_NAME. Есть ли лучший способ?

Ответы [ 3 ]

6 голосов
/ 29 мая 2009

Нет, нет, нет! Не редактируйте файлы среды. Я имею в виду, отредактируйте их так, как вам нужно, для вещей, которые нужно настроить одинаково для каждого развертывания , но не для вещей, которые должны быть настраиваемыми между развертываниями .

Для этого используйте конфигурацию.

Бросьте файл YAML в config, который выглядит примерно так:

development:
  :app_name: App 1
  :host_name: something.com

test:
  :app_name: App 1
  :host_name: something.com

production:
  :app_name: App 1
  :host_name: something.com

Называйте это как угодно. Допустим, settings.yml.

Теперь загрузите его инициализатором в config/initializers/settings.rb, который выглядит следующим образом:

SETTINGS = YAML.load_file("#{RAILS_ROOT}/config/settings.yml")[RAILS_ENV]

Теперь получите доступ к вашей конфигурации следующим образом:

SETTINGS[:app_name]

(Если вы вообще не хотите изменять существующий код, в config/initializers/settings.rb добавьте строки, которые устанавливают ваши существующие имена, такие как APP_NAME = SETTINGS[:app_name] и т. Д.)

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

Опять же, резюмируем:

  • Файлы среды предназначены для конфигурации, которая одинакова для всех развертываний
  • файлы конфигурации предназначены для конфигурации, которая может меняться между развертываниями

Обновление

Для развертываний на основе Capistrano, это то, что я использую для символической ссылки нескольких файлов конфигурации в новом current из каталога shared (я думаю, что он изначально пришел из рецепта Ezra от EngineYard):

after "deploy:update_code","deploy:symlink_configs"

namespace(:deploy) do  
  task :symlink_configs, :roles => :app, :except => {:no_symlink => true} do
    configs = %w{ database settings }
    configs.map! { |file| "ln -nfs #{shared_path}/config/#{file}.yml #{release_path}/config/#{file}.yml" }
    run <<-CMD
      cd #{release_path} && #{configs.join(' && ')}
    CMD
  end
end
1 голос
/ 29 мая 2009

Поскольку вы фактически развертываете в двух разных средах, кажется, лучше всего создать два разных файла окружения, каждый со своими настройками. Убедитесь, что вы выбрали описательные имена для своих файлов среды, а не только production2.

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

1 голос
/ 29 мая 2009

Я думаю, что это довольно хороший способ.

Там, где мы находимся, мы определяем различные среды (например, 'staging', 'production', 'production_backup' - давая нам staging.rb, production.rb, production_backup.rb, где вы можете определить свои конкретные APP_NAMEs и HOST_NAMEs) и может развертываться для каждого из них с помощью Capistrano. Работает просто отлично.

Это хорошая ссылка: http://www.egtheblog.com/?p=8

...