Інсценізаційний екземпляр на Heroku


85

Я хотів би мати можливість надсилати код dev.myapp.comдля тестування, а потім www.myapp.comдля виробничого використання. Чи можливо це за допомогою Heroku?

Відповіді:


142

Ваш інтерфейс до 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

Дякую - це має певний сенс (я смокчу git). Питання: Припустимо, я працюю над деякими передовими змінами на гілці "край". Як я можу підштовхнути цю гілку до staging-myapp, не впливаючи на myapp (який зараз працює на головній гілці)? Робить git push staging edge work?
Том Леман,

Щоб зацікавити вас, ви просто злиєте край із вашою інсценізаційною гілкою і натиснете на нього. Ваше виробниче відділення є окремим і чистим. Ви завжди можете розгалужити його та внести зміни, які лише зливаються назад.
Luke Bayes

5
Замість того, щоб створювати програми з віддаленою гілкою за замовчуванням 'heroku' та після її видалення, ви можете скористатися набагато приємнішим рішенням, наприклад:heroku create yourapp --remote your-remote
dombesz

2
Як тільки ви налаштуєте це, усі ваші herokuкоманди повинні включати --app stagingабо --app production. Чи є спосіб встановити за замовчуванням? (Запитуючи як коментар б / к, це здається занадто націленим, щоб бути повноцінним ТАК питанням.)
Paul A Jungwirth

3
@PaulAJungwirth Щоб встановити додаток Heroku за замовчуванням, використовуйте щось на зразок "git config heroku.remote staging". Більше в документах Heroku на devcenter.heroku.com/articles/multiple-environments .
grifaton


10

Ключовою частиною оригінального запитання є пов’язання індексної програми з субдоменом (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.


1
як щодо контролю доступу, щоб він не відображався в google тощо, і люди не натрапляли на нього і думали, що це справжнє? якісь гарні рішення?
brittohalloran

Так, найпростіший спосіб - пропустити крок GoDaddy і отримати доступ до версії програми для розробників безпосередньо з домену Heroku за допомогою URL-адреси Heroku. (наприклад, stormy-lake-5483.heroku.com. ) Однак, якщо ви хочете вимкнути dev з вашого домену, як описано тут, ви завжди можете встановити файл robots.txt, щоб повідомити google, bing та ін. ін. не індексувати свій сайт розробника. Це допоможе не потрапляти в пошукові системи.
Don Leatham,

Врешті-решт я додав before_filterгачок до свого, application_controllerщоб ВСЕ схопити в постановці та змусити користувача ввійти як адміністратор, а потім встановити адміністративний файл cookie, щоб я все ще міг бачити додаток з точки зору "не-адміністратора". Для мене працює досить добре.
brittohalloran

8

Вам слід перевірити heroku_san

Це робить досить гарну роботу, жонглюючи середовищами на героку.


7

Зараз все простіше. Ось як ви це робите ...

Створіть програму для кожного середовища

$ 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

Для програм 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: "Може виникнути спокуса створити інше користувацьке середовище, таке як" staging ", та створити config / environment / staging.rb та розгорнути в додатку Heroku з RAILS_ENV = staging. Це погана практика Натомість ми рекомендуємо завжди працювати у виробничому режимі та змінювати будь-яку поведінку, встановлюючи ваші налаштування. Більше про це тут: devcenter.heroku.com/articles/…
Koen.

@ Koen - Спроба керувати складними конфігураціями Rails без контексту середовищ є абсолютно непрактичною на мій досвід, будь то на Heroku чи іншому. Якщо у вас є цілий набір рядків підключення, ключі API тощо для вашої інтерактивної програми та іншої для вашої робочої програми, чи справді ви збираєтеся встановлювати ці конфігураційні вари окремо для кожного? Це просто прохання про неприємності - Героку тут дає погані поради.
Ярін

Дякую. Я шукаю інсценізацію, яка справді отримує справжню URL-адресу, ймовірно, за допомогою commithash. Я думаю, це те, що Zeit Now або Netlify спростило це.
Полв
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.