2014-10-21 9 views
1

У меня есть приложение Rails 3.2.x, которое я собираюсь устанавливать на нескольких серверах каждый для другой компании. Таким образом, такие вещи, как путь к логотипу, ключи twilio API, некоторые текстовые объявления и т. Д., Будут меняться в зависимости от компании. Каждый экземпляр сервера будет использовать один и тот же репозиторий кода jithub, но мне нужна конфигурация, такая как эти элементы для разных серверов.Несколько экземпляров приложений и конфигураций

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

Я думал, что могу создать файл config/application.yml с этими переменными ENV в них, но не знаю, как получить рельсы для загрузки этого файла. Я хотел бы добавить config/application.yml в .gitignore и вручную создать отдельный файл config/application.yml на каждом сервере в приложении/shared/config и сделать символическую ссылку в моем Capistrano deploy.rb.

Может кто-нибудь помочь мне указать мне в правильном направлении настройки переменных ENV в файле application.yml и получить мое приложение Rails для их загрузки, чтобы они могли быть вызваны из представлений, контроллеров, моделей и т. Д.?

+0

Да, в вашем deploy.rb просто свяжите конфигурационный файл с локальными серверами, а не такими фантазийными, но довольно простыми. – ryenus

ответ

1

Я думаю, что я понял, как сделать эту работу, все еще нужно проверить.

Сначала я создаю инициализатор для настройки компании, заданных по умолчанию, если файл company.yml не изменился и объединить атрибуты от нагрузки YAML

конфигурации/Инициализаторы/company.rb

default_company = { 
    name: "changeme", 
    phone: "000-000-0000", 
    email: "[email protected]", 
    logo_path: "public/logo_changeme.png", 
    email: "[email protected]", 
    no_reply_email: "[email protected]" 
} 

Company = YAML.load_file(Rails.root.join('config', 'company.yml')).merge(default_company) 

Затем создайте YAML файл с конкретными настройками компании: конфигурации/company.yml

--- 
:name: acme 
:phone: '281-444-8800' 
:logo_path: 'public/acme.png' 
:email: '[email protected]' 
:no_reply_email: '[email protected]' 

Тогда я был бы уверен, что company.yml находится в .gitignore, поэтому он не выталкивается на репо. После этого я бы scp конкретного company.yml к соответствующему серверу в файле app/shared/config directory. Then somehow in my Capistrano deploy, symlink after deploy similar to how I symlink my database.yml` так, что сохраняется между высвобождением внедрениями:

deploy.rb выдержки

task :after_update_code do 
    run "ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml" 
    run "ln -nfs #{deploy_to}/shared/config/company.yml #{release_path}/config/company.yml" 
end 

Я думаю, что это будет работать , но мне нужно протестировать его на промежуточном сервере, особенно в части symlink capistrano.

+0

Я тестировал это, но слияние в обратном порядке появляется. Он принимает 'default_company' и перезаписывает/объединяет файл' company.yml'. Когда я отформатирую его 'Company = default_company.merge (YAML.load_file (Rails.root.join ('config', 'company.yml')))' Я получаю сообщение об ошибке сервера сервера rails. – nulltek

Смежные вопросы