Проводящий экземпляр на Heroku

Я хотел бы использовать код для dev.myapp.com для тестирования, а затем для www.myapp.com для использования в производстве. Возможно ли это с Heroku?

Ответ 1

Ваш интерфейс к Heroku по существу является ветвью Git. Жемчуг Heroku выполняет некоторую работу через свой 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

Ответ 3

Ключевой частью исходного вопроса является связывание промежуточного приложения с субдоменом (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 в staging-myapp:

heroku domains:add dev.myapp.com --app staging-myapp

После того, как запись CNAME успела распространиться, вы сможете запустить свое промежуточное приложение на dev.myapp.com.

Ответ 4

Вы должны проверить heroku_san

Это довольно хорошая работа, манипулирующая средами на герою.

Ответ 5

Теперь все проще. Вот как вы это делаете...

Создайте приложение для каждой среды

$ heroku create myapp --remote production
$ heroku create myapp-staging --remote staging

Это создаст именованные удаленные репозитории для каждого приложения, которые вы можете увидеть в .git/config.

Теперь вы можете использовать либо - приложение, либо - удаленные переключатели для таргетинга на конкретное приложение:

$ heroku info --app myapp-staging
$ heroku info --remote staging

Установить среды Rails

Для приложений 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.

Deploy

Теперь вы просто нажимаете на 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 для получения дополнительной информации и ярлыков.)