Heroku의 스테이징 인스턴스


85

dev.myapp.com테스트 용으로 코드를 푸시 한 다음 www.myapp.com프로덕션 용 으로 푸시 할 수 있기를 바랍니다. Heroku로 가능합니까?

답변:


142

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 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를 빤다). 질문 : 제가 브랜치 "엣지"에 대한 최첨단 변경 작업을한다고 가정 해 보겠습니다. myapp (현재 마스터 브랜치에서 실행 중임)에 영향을주지 않고 해당 브랜치를 staging-myapp에 푸시하려면 어떻게해야합니까? 그렇 git push staging edge work습니까?
— Tom Lehman

진행을 위해 에지를 스테이징 브랜치에 병합하고 푸시하면됩니다. 생산 지점은 분리되어 있고 깨끗합니다. 항상 분기하여 다시 병합하는 변경을 수행 할 수 있습니다.
— Luke Bayes

5
기본 'heroku'원격 브랜치를 사용하여 앱을 생성하는 대신 삭제 후 다음과 같은 훨씬 더 좋은 솔루션을 사용할 수 있습니다.heroku create yourapp --remote your-remote
— dombesz

2
당신이 이것을 설정하면, 모든 heroku명령을 포함해야 --app staging하거나 --app production. 기본값을 설정하는 방법이 있습니까? (이 너무 본격적인 SO 질문 할 대상으로 보인다 C / A 코멘트 B로 물어.)
— 폴 Jungwirth

3
@PaulAJungwirth 기본 Heroku 앱을 설정하려면 "git config heroku.remote staging"과 같은 것을 사용합니다. devcenter.heroku.com/articles/multiple-environments 의 Heroku 문서에서 더 자세히 알아보세요 .
— grifaton 2012 년


10

원래 질문의 핵심 부분은 스테이징 앱을 기본 앱 (www.myapp.com)의 하위 도메인 (dev.myapp.com)에 연결하는 것입니다. 이것은 어떤 답변에서도 다루어지지 않았습니다.

1 단계 : Luke Bayes의 답변에 표시된대로 앱의 프로덕션 ( 'myapp') 및 스테이징 ( 'staging-myapp') 버전을 모두 구성합니다.

2 단계 : 도메인 관리 시스템 (예 : GoDaddy)에서 :

Create a CNAME record:  dev.myapp.com 
that points to:   proxy.heroku.com

3 단계 : dev.myapp.com을 staging-myapp로 라우팅하도록 Heroku를 구성합니다.

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

CNAME 레코드가 전파 될 시간이 지나면 dev.myapp.com에서 스테이징 앱을 실행할 수 있습니다.


1
액세스 제어는 어떻습니까? 그래서 그것은 구글 등에 나타나지 않고 사람들이 그것을 우연히 발견하지 않고 그것이 진짜라고 생각하지 않습니까? 좋은 해결책이 있습니까?
— brittohalloran

예, 가장 쉬운 방법은 GoDaddy 단계를 건너 뛰고 Heroku URL을 사용하여 Heroku 도메인에서 직접 앱의 "dev"버전에 액세스하는 것입니다. (예 : stormy-lake-5483.heroku.com. ) 그러나 여기에 설명 된대로 도메인에서 'dev'를 사용하지 않으려면 항상 robots.txt 파일을 설치하여 google, bing 등을 알릴 수 있습니다. al. 개발 사이트의 색인을 생성하지 않습니다. 그것은 검색 엔진에서 그것을 유지하는 데 도움이 될 것입니다.
— Don Leatham

나는 스테이징에서 모든 것을 포착하고 사용자가 관리자로 로그인하도록 강요 한 다음 관리자 쿠키를 설정하여 '비 관리자'의 관점에서 앱을 계속 볼 수 있도록 before_filter후크를 추가했습니다 application_controller. 나를 위해 꽤 잘 작동합니다.
— brittohalloran


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 gem을 사용하고 실행합니다.

$ 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 를 참조하십시오.)


설정 RAILS_ENV과 RACK_ENV에 stagingHeroku가 낙담된다. 준비 "와 설정 / 환경 / staging.rb와이 아닌 배포 RAILS_ENV = 준비와 Heroku가 응용 프로그램에 좋은 연습을 만들"이 같은 다른 사용자 환경을 만들기 위해 유혹 할 수있다 " . 대신 항상 프로덕션 모드에서 실행하고 구성 변수를 설정하여 모든 동작을 수정하는 것이 좋습니다. " 자세한 내용은 여기 : devcenter.heroku.com/articles/…
— Koen.

@ Koen- 환경의 맥락없이 복잡한 Rails 구성을 관리하려는 시도는 Heroku이든 아니든 내 경험상 완전히 비현실적입니다. 스테이징 앱에 대한 전체 연결 문자열, API 키 등이 있고 프로덕션 앱에 대해 다른 집합이있는 경우 이러한 구성 변수를 각각에 대해 개별적으로 설정 하시겠습니까? 그것은 단지 문제를 요구하는 것입니다. Heroku는 여기서 나쁜 조언을하고 있습니다.
— Yarin 2014 년

감사. 나는 실제로 커밋 해시로 실제 URL을 얻는 스테이징을 찾고 있습니다. Zeit Now 또는 Netlify가 쉽게 만든 것이라고 생각합니다.
— Polv
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.