Я хотел бы иметь возможность отправлять код dev.myapp.com
для тестирования, а затем www.myapp.com
для производственного использования. Возможно ли это с Heroku?
Ответы:
Ваш интерфейс к 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 git@heroku.com:staging-yourapp.git
git push origin staging
git remote add production git@heroku.com: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
heroku create yourapp --remote your-remote
heroku
команды должны включать --app staging
или --app production
. Есть ли способ установить значение по умолчанию? (Вопрос в качестве комментария b / c кажется слишком целенаправленным, чтобы быть полноценным SO-вопросом.)
Это объясняет все, что вам нужно знать, если вы такой же новичок, как я: 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 на staging-myapp:
heroku domains:add dev.myapp.com --app staging-myapp
После того, как запись CNAME успеет распространиться, вы сможете запустить свое промежуточное приложение на dev.myapp.com.
before_filter
ловушку, чтобы application_controller
поймать ВСЕ на постановке и заставить пользователя войти в систему как администратор, а затем установить файл cookie администратора, чтобы я мог видеть приложение с точки зрения «неадминистратора». Работает неплохо для меня.
Вы должны проверить heroku_san
Он неплохо справляется с жонглированием окружением на героку.
Теперь все проще. Вот как вы это делаете ...
$ 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 для получения дополнительной информации и ярлыков.)
RAILS_ENV
и RACK_ENV
к staging
обескураживает Heroku: «Это может быть заманчивым , чтобы создать другую пользовательскую среду , такие как„постановка“и создать конфиг / сред / staging.rb и развернуть в приложение Heroku с RAILS_ENV = стадирования Это не является хорошей практикой. . Вместо этого мы рекомендуем всегда работать в производственном режиме и изменять любое поведение, задав переменные конфигурации. " Подробнее об этом здесь: devcenter.heroku.com/articles/…
git push staging edge work
?