Ответ 1
Вы можете иметь конфиг-хранители, которые постоянно сохраняются в каждой локальной установке приложения heroku, поэтому они не обязательно должны быть в вашем коде! поэтому один и тот же код может работать на нескольких сайтах heroku, но с другой конфигурацией. Это очень просто, легко, элегантно...
Это подход, который мы использовали. (Мы использовали его для ТОЧНОЙ вещи... у нас есть несколько клонов приложения SAME в Heroku, но мы хотим только одного источника в github, в нашем локальном каталоге dev мы делаем PUSH для ORIGIN (github), тогда, когда у нас есть так как нам это нравится, мы CD в локальный каталог prod, который отправляется в SAME репозиторий github, и мы ТОЛЬКО PULL из GITHUB в этот каталог, никогда не нажимаем (например, все нажатия на github приходят из нашего каталога dev каталог prod - это просто промежуточная область для другого приложения heroku.)
По , имеющему разные конфигурации на разных сайтах HEROKU (как описано ниже), EXACT SAME CODE работает на BOTH сайтах heroku.
Итак, наш рабочий процесс: (ключ в том, что каталоги BOTH указывают на SAME github repo)
cd myDEVdir
*....develop away....*
git add .
git commit -am "another day, another push"
git push origin *(to our SINGLE github repo)*
git push heroku *(test it out on heroku #1)*
cd ../myPRODdir
git pull *(grabs SAME code as used on other site *)
git push heroku *(now the SAME code runs on Heroku #2)*
что это!
Теперь, как вы храните свой сайт-специфический конфиг на сайте heroku:
http://docs.heroku.com/config-vars
в локальной командной строке, для каждого из двух локальных каталогов выполните:
$ heroku config:add FIRST_CONFIGVAR=fooheroku1
Adding config vars:
FIRST_CONFIGVAR => fooheroku1
$ heroku config:add SECOND_CONFIGVAR=barheroku1
Adding config vars:
SECOND_CONFIGVAR => barheroku1
чтобы увидеть те, которые вы определили:
$ heroku config
FIRST_CONFIGVAR => fooheroku1
SECOND_CONFIGVAR => barheroku1
затем cd в другой каталог myPRODdir и сделайте ТОЧНУЮ вещь, установите только одни и те же удаленные геры героя для fooheroku2 и barheroku2.
то в вашем приложении rails вы просто ссылаетесь на них так:
a = ENV['FIRST_CONFIGVAR']
В одном приложении будет читаться "fooheroku1", другое приложение будет читать "fooheroku2"
И наконец, в вашем ЛОКАЛЬНОМ каталоге myDEVdir, где вы запускаете в режиме DEV, поместите те же команды config в свой файл config/environment/development.rb
, что ваша версия dev будет установлена так, как бы они ни были:
ENV['FIRST_CONFIGVAR'] = "foodev"
ENV['SECOND_CONFIGVAR'] = "bardev"
Легкий, элегантный. Спасибо, Heroku!