ПОЛУЧИТЕ Развертывание + Конфигурационные файлы + Heroku - PullRequest
11 голосов
/ 01 февраля 2011

Я использую Heroku для размещения приложения на Rails, что означает использование Git для развертывания в Heroku.Из-за «чистого рабочего процесса Git» в Heroku все, что нужно для восходящего потока на сервер, должно быть сконфигурировано одинаково на моем локальном компьютере.

Однако мне нужно, чтобы определенные файлы конфигурации были разными в зависимости от того,Я нахожусь в локальной настройке или развернут на Heroku.Опять же, из-за метода развертывания, который использует Heroku, я не могу использовать .gitignore и шаблон (как я уже неоднократно предлагал и использовал в других проектах).

Что мне нужно, так это чтобы git каким-то образомотслеживать изменения в файле, но выборочно указывать git не переопределять определенные файлы при извлечении из определенного репозитория - в основном, чтобы вносить определенные изменения только в одну сторону.

Можно ли это сделать?Буду признателен за любые предложения!

Ответы [ 2 ]

16 голосов
/ 02 февраля 2011

Вы можете иметь конфигурационные переменные, которые постоянно хранятся в локальной настройке каждого приложения heroku, чтобы они вообще не были в вашем коде!поэтому один и тот же код может работать на нескольких сайтах героку, но с разной конфигурацией.Это очень просто, легко, элегантно ...

Это подход, который мы использовали.(Мы использовали его для ОДНОГО ЖЕ вещи ... у нас есть несколько клонов того же приложения в Heroku, но нам нужен только ОДИН исходный код на github, в нашем локальном каталоге dev мы делаем PUSH to ORIGIN (github), затем, когда у нас естьтак, как нам нравится, мы записываем CD в локальный каталог prod, который идет в тот же самый github-репозиторий, и мы ТОЛЬКО PULL из GITHUB в этот каталог, никогда не проталкиваем (например, все нажатия на github происходят изнаш каталог dev, каталог prod - это просто промежуточная область для другого приложения heroku.)

В с разными конфигами на разных сайтах HEROKU (как описано ниже), EXACT ЖЕ КОД работает на ОБЕ сайтах heroku.

Итак, наш рабочий процесс: (ключ в том, что ОБА каталоги указывают на ТО ЖЕ ГИТУБ РЕПО)

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

, затем перейдите в другой каталог myPRODdir и сделайте ТО ЖЕ, только установите те же самые удаленные переменные heroku на fooheroku2 и barheroku2.

тогда в вашем приложении rails вы просто ссылаетесь на них следующим образом:

a = ENV['FIRST_CONFIGVAR']

Одно приложение будет читать 'fooheroku1', другое приложение будет читать 'fooheroku2'

И, наконец,в вашем ЛОКАЛЬНОМ каталоге myDEVdir, где вы запускаете в режиме DEV, поместите те же самые команды config в ваш файл config/environment/development.rb, что ваша версия 'dev' конфигурации vars будет установлена ​​на то, что они должны быть:

ENV['FIRST_CONFIGVAR'] = "foodev"
ENV['SECOND_CONFIGVAR'] = "bardev"

Легко, элегантно.Спасибо, Героку!

5 голосов
/ 01 февраля 2011

Вот несколько решений:

1) Если вы хотите игнорировать файлы только на heroku, используйте slugignore

2) Если ваши изменения незначительны, оставайтесьСУХОЙ и используйте универсальные конфигурационные файлы, вставляя переключатели для специфического поведения сервера

if Rails.env == "production"
    #production server code
elsif Rails.env == "development"
    #development server code
else
    #test server code
end

3) Если ваши изменения значительны, напишите один конфигурационный файл и добавьте «smudge file» в конфигурацию/ инициализаторы для каждого дополнительного сервера.По сути, у вас будут отдельные файлы с использованием метода, описанного в (2).

4) Если ваши изменения НЕЗАВИСИМЫ (маловероятны), то поддерживайте отдельные ветви для каждого сервера.

5) Этот скрипт может делать именно то, что вы просили, но может быть излишним.

Надеюсь, это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...