Нет, нет, нет! Не редактируйте файлы среды. Я имею в виду, отредактируйте их так, как вам нужно, для вещей, которые нужно настроить одинаково для каждого развертывания , но не для вещей, которые должны быть настраиваемыми между развертываниями .
Для этого используйте конфигурацию.
Бросьте файл 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