Вот наши основные требования:
- У нас есть базовое приложение Rails, которое активно поддерживается.
- Мы хотим предложить индивидуальную версию этого приложения, учитывая, что:
- серверы должны находиться в помещении нашего клиента и работать в другом домене.
- есть специальное инструментарий ведения журналов для их собственного мониторинга в центре обработки данных.
Для этого я вижу несколько вариантов достижения этой цели:
- Git branch
Rails::Engine
Rails::Application
Наиболее очевидным ответом будет Git branch для полной гибкости.
Однако я не уверен, что это хорошая идея, потому что кодовая база в значительной степени разделяется, а основная строка имеет многобольше действий - наверстать упущенное с помощью rebase / merge.
Мы хотим максимально разделить оригинальную и настроенную версии.Другими словами, мы хотим, чтобы как можно реже возникали конфликты между оригиналом и настроенным.
Rails::Engine
или Rails::Application
казалось близкой идеей (я не знаком с Rails Engines),но я не понимаю, как иметь OurApp::Application
и OurCustomizedApp::Application
в одном месте и переключаться между ними глобально и динамически.
Возможно, было бы неплохо иметь:
- пользовательские инициализаторы, контроллеры и представления в отдельном каталоге для переопределения (или исправления) исходной
- возможности указать, какое приложение (оригинальное или настроенное) загружать с помощью переменной среды, такой как
RAILS_APP
- отдельные файлы конфигурации, например так:
config/database.yml
будет config/customer1/database.yml
- возможность использовать тот же
deploy.rb
для capistrano (возможно, с config/servers.yml
и config/customer1/servers.yml
для определения ролей и IP-адресов?)
Существуют ли практики / соглашения для наших требований?Любой совет?
Наши приложения работают на Ruby 1.9.2 + Rails 3.0.3.
ОБНОВЛЕНИЕ
Мы запустили его как ветку Git.Мы создали задачу rake для генерации файла в config/branch
, который содержит текст типа «master» или «custom», и application.rb читает его при начальной загрузке.Конфиги типа database.yml
или servers.yml
теперь находятся в config/mainline/
или config/customized/
, и application.rb обрабатывает их соответственно.
config.paths.config.database = "config/#{branch}/database.yml"
Не идеально, но пока достаточно.Я обновлю, когда мы найдем лучший способ сделать это.