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