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_ENVRAKE_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_ENVRACK_ENVstagingHeroku가 낙담된다. 준비 "와 설정 / 환경 / 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.