Нет, нет! Не редактируйте файлы окружения. Я имею в виду, отредактируйте их так, как вам нужно, для вещей, которые необходимо настроить так же для каждого развертывания, но не для вещей, которые должны быть , настраиваемых между развертываниями.
Для этого используйте конфигурацию.
Бросьте файл 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]
и т. д.)
Обратите внимание, что это один из возможных вариантов привязка настроек настроек, но даже если принять другой подход, он должен основываться на конфигурации, не зависящей от развертывания. Это может быть намного проще и сдержанно настроено для сохранения между развертываниями и обновлениями, чем удаление файлов окружения.
Снова повторит:
- среда файлов для конфигурации, которая одинакова для всех внедрений
- конфигурационных файлов для конфигурации, которые могут меняться между внедрениями
Update
Для развертываний на базе Capistrano это то, что я использую для symlink multi PLE файлы конфигурации в новом current
из каталога shared
(я думаю, что изначально пришли из рецепта Эзры из 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
Имеет смысл. Но как мне получить разные файлы настроек для каждого развертывания? – zaius
Предположительно, у них тоже разные базы данных. Вы используете ту же стратегию, которую используете для предоставления им различных файлов config/database.yml. При развертывании на основе Capistrano это обычно означает символическую привязку к файлам в общей папке. –
Aha! Это то, что я искал. Таким образом, каждое место развертывания будет иметь свои собственные файлы настроек, и я использую свой инструмент развертывания для симпликации. Отлично, спасибо! – zaius