5 ответов:
ваш интерфейс к Heroku по сути является веткой Git. Heroku gem выполняет некоторую работу через свой API, но в вашем репозитории Git это просто новая удаленная ветвь.
heroku create yourapp # production git br -D heroku # delete the default branch heroku create staging-yourapp # staging git br -D heroku # delete the default branchпосле того, как вы настроили несколько приложений на Heroku, вы должны иметь возможность настроить свой репозиторий Git следующим образом:
git remote add staging [email protected]:staging-yourapp.git git push origin staging git remote add production [email protected]:yourapp.git git push origin productionЯ обычно работаю в "рабочей" ветке и использую Github для своего мастера.
предполагая, что это так для вас, ваш рабочий процесс развертывания, вероятно, будет посмотрите что-то вроде:
git co -b working # do some work # push to github: git co master git merge working git push # push to staging: git co staging git merge master git push origin staging # push to production git co production git merge master git push origin production
Это объясняет все, что вам нужно знать, если ваш новичок, как я:http://devcenter.heroku.com/articles/multiple-environments
ключевой частью исходного вопроса является связывание промежуточного приложения с поддоменом (dev.myapp.com) из основного приложения (www.myapp.com). это не было рассмотрено ни в одном из ответов.
Шаг 1: настройте как производственные ("myapp"), так и промежуточные ("staging-myapp") версии вашего приложения, как указано в ответе Люка Байеса
Шаг 2: в вашей системе управления доменами (например, GoDaddy):
Create a CNAME record: dev.myapp.com that points to: proxy.heroku.comШаг 3: Настройка Heroku для маршрутизации dev.myapp.com к постановке-myapp:
heroku domains:add dev.myapp.com --app staging-myappпосле того, как запись CNAME успеет распространиться, вы сможете запустить свое промежуточное приложение по адресу dev.myapp.com.
вы должны проверить heroku_san
Он делает довольно хорошую работу жонглирование с окружающей средой на heroku.
теперь все проще. Вот как вы это делаете...
создать приложение для каждой среды
$ heroku create myapp --remote production $ heroku create myapp-staging --remote stagingэто создаст именованные удаленные репозитории для каждого приложения, которые вы можете увидеть в
.git/config.теперь вы можете использовать -- app или --remote переключается на цель конкретного приложения:
$ heroku info --app myapp-staging $ heroku info --remote stagingустановить Rails среды
для рельсов приложений, Heroku по умолчанию "производства" окружающая среда. Если вы хотите, чтобы ваше промежуточное приложение работало в промежуточной среде,создать окружающую среду в вашем проекте и установите соответствующий RAILS_ENV и RAKE_ENV переменные среды в приложении:
$ heroku config:set RACK_ENV=staging RAILS_ENV=staging --remote stagingнастройки среды
если у вас есть другие переменные конфигурации, вам также нужно будет передать их для каждой среды.
$ heroku config:set AWS_KEY=abc --remote staging $ heroku config:set AWD_SECRET=123 --remote staging ...etcэто огромная боль, хотя я просто использую мой snappconfig камень и запустить
$ rake heroku:config:load[myapp-staging]чтобы загрузить файлы конфигурации YAML моего проекта в Heroku.
развернуть
теперь вы просто нажимаете на Heroku вот так:
$ git push staging master $ git push production masterи мигрировать вот так:
$ heroku run rake db:migrate --remote staging $ heroku run rake db:migrate --remote production
(см. управление несколькими средами для приложения / Heroku Dev Center для получения дополнительной информации и ярлыков.)
Comments