개요
최근 Heroku 측으로부터 현재 제가 배포한 애플리케이션이 운영되는 스택(Cedar-14)의 지원이 만료된다는 안내를 메일로 수신하였습니다. Heroku에서 이야기하는 스택(Stack)이란 운영체제의 이미지를 의미합니다. Heroku의 운영체제 이미지는 현재 Ubuntu를 기반으로 하고 있습니다. 따라서 간단히 말하면 Ubuntu 14.04를 기반으로 동작하고 있는 저의 애플리케이션의 운영체제를 업그레이드하라는 안내였습니다. 이번 포스트에서는 이를 수행해 보도록 하겠습니다.
조치방법
(사전작업) Heroku CLI 설치
Heroku CLI 설치
$ curl https://cli-assets.heroku.com/install.sh | sh
$ heroku --version
계정 로그인
$ heroku login
혹은 CLI에서 아이디와 암호를 입력해야 할 경우 -i
옵션을 추가합니다.
$ heroku login -i
지원 만료 Heroku 애플리케이션 확인
우선 스택 업그레이드를 해야 하는 대상 애플리케이션이 무엇인지 확인해야 합니다.
$ heroku plugins:install apps-table
$ heroku apps:table --filter="STACK=cedar-14"
App Name Stack Team
frozen-anchorage-15837 cedar-14 null
frozen-anchorage-15837
라는 이름의 애플리케이션이 지원이 만료된 스택에서 동작중인 것을 확인할 수 있습니다.
최신 스택으로 업그레이드하기
기존 Heroku 애플리케이션 소스코드 다운로드
※ 해당 애플리케이션(frozen-anchorage-15837
)은 2017년 Ruby on Rails를 학습할 당시 작성한 것으로 현재 사용하고 있지는 않으나, Heroku의 사용법을 학습하는 차원에서 최신 스택을 적용해 보도록 하겠습니다.
앞서 확인하였던 frozen-anchorage-15837
애플리케이션의 소스코드를 받도록 합니다.
$ mkdir ModooRadio # 비어있는 폴더를 만듭니다.
$ cd ModooRadio # 만든 폴더로 이동합니다.
$ git init # Git 에서 버전관리를 할 수 있도록 초기화 합니다.
$ heroku git:remote -a frozen-anchorage-15837 # 기존 Heroku 어플리케이션 저장소를 추가합니다.
$ git pull heroku master # 기존 Heroku 어플리케이션의 소스코드를 받아 옵니다.
혹은 간단히 clone
할 수도 있습니다.
$ heroku git:clone -a frozen-anchorage-15837
$ cd frozen-anchorage-15837
애플리케이션 소스가 확보되었습니다.
최신 스택으로 적용하는 방법은 두 가지가 있습니다.
- 기존 어플리케이션의 실행환경(스택)을 Heroku-18로 업그레이드
- 기존 애플리케이션을 복재하여 Heroku-18 스택에서 동작하는 새로운 Heroku 어플리케이션을 생성
기존 Heroku 어플리케이션 실행환경 업그레이드
(중요) 기존 어플리케이션 업그레이드
제 경우와 같이 오랫동안 업데이트를 하지 않은 어플리케이션의 경우 개발자 센터에 안내된 것과 같이 간단히 실행환경만 변경하여 스택을 업그레이드 할 수는 없습니다. frozen-anchorage-15837
는 앞서 언급한 것처럼 2년 전 학습을 위해 잠시 작성하여 실행한 후, 오랜 기간 방치했기 때문에 ruby 2.2.6을 사용하고 있습니다. heroku-18 스택에서 적용하고 있는 정책에 따라 이를 그대로 heroku-18 스택에서 실행할 수는 없습니다. 따라서 애플리케이션에서 사용할 ruby 및 Gemfile 내의 dependency의 버전을 모두 최신 버전으로 업데이트합니다.
※ 이에 대한 내용은 Heroku 스택 업그레이드와 관련성이 낮으므로 본 포스트에 가장 하단에 작성하였습니다.
기존 애플리케이션 실행환경 업그레이드
다음과 같이 CLI를 이용하여 기존 Heroku 애플리케이션을 업그레이드할 수 있습니다. 이 경우 사용할 스택을 heroku-18로 설정합니다. frozen-anchorage-15837
부분은 여러분의 Heroku 애플리케이션의 이름을 넣습니다.
$ heroku stack:set heroku-18 -a frozen-anchorage-15837
stack set, next release on production-app will use heroku-18
Run `git push heroku master` to create a new release on heroku-18
안내된 내용과 같이 애플리케이션의 스택이 즉시 변경되는 것은 아닙니다. 어플리케이션의 변경사항이 발생하여 이를 push 할 경우 반영됩니다. 따라서 어플리케이션의 변경사항이 없는 경우에도 다음과 같이 비어있는 commit을 작성하여 push 합니다.
$ git commit --allow-empty -m "Upgrading to heroku-18"
[master 973c3f7] Upgrading to heroku-18
제 경우는 Gemfile을
수정하였으며 이를 반영하였습니다. 변경사항을 push 합니다.
$ git add .
$ git commit -m "specify ruby version @ Gemfile"
$ git push heroku master
소스가 배포되면 Heroku의 스택이 새로 변경됩니다. 이것으로 스택 update가 완료되었습니다.
새로운 Heroku 애플리케이션 생성
기존의 실행환경을 업그레이드하는 것도 좋지만 때로는 모두 새로 시작하는 것도 좋은 방법일 것입니다.
이번에는 앞서 확보하였던 frozen-anchorage-15837의
소스코드를 새로운 heroku-18 스택 위에 올려 별도의 애플리케이션을 생성해 보겠습니다.
$ heroku create --remote new-Origin --stack heroku-18 rubytest-heroku-18
rubytest-heroku-18
부분은 여러분이 새로 사용할 애플리케이션 명칭으로 수정합니다.new-Origin
항목은 새로운 애플리케이션의 git 저장소(repository)의 명칭입니다. 이 역시 마음에 드는 이름으로 입력합니다.
새로운 Heroku 애플리케이션을 배포하기 위하여 앞서 설정한 git 저장소로 소스코드를 push 합니다.
$ git push new-Origin master
이번에는 Heroku-18 에서 동작하는 새로운 애플리케이션이 생성됩니다.
마무리
Heroku의 스택을 업그레이드하는 작업은 사실 매우 간단하였습니다.
제 경우는 현재 사용하지 않는 ruby 애플리케이션을 이용하여 이 과정을 수행하다 보니 오히려 ruby 애플리케이션의 버전을 갱신하는 작업에 대부분의 시간을 소요하였습니다.
따라서 이러한 특수한 경우가 아니라면, 상세한 안내가 제공되고 있어 쉽고 빠르게 수행할 수 있을 것입니다.
참고
'개발도구 > 기타' 카테고리의 다른 글
[Vim] Normal모드에서 영문 키보드로 자동 전환하기 (Windows) (3) | 2020.10.13 |
---|---|
StackEdit 작성글 일괄 내보내기(export) 스크립트 (0) | 2020.09.25 |
Oracle Cloud Free Tier 가입 오류 및 해결 과정 (0) | 2020.05.11 |
Permission Error for NPM install -g (0) | 2019.08.25 |
Node.js 를 위한 Heroku 사용 (0) | 2018.05.29 |