Heroku 배포 오류 해결: 자산 컴파일 및 환경 변수 문제 해결 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
Ruby on Rails 및 Node.js 기반 앱 개발자, Heroku 배포 경험자
핵심 요약
- 환경 설정 필수:
RAILS_ENV=production
설정 및heroku config:set
명령어 사용 - 빌드팩 순서 중요:
heroku/nodejs
→heroku/ruby
순서로 추가 - 로깅 중심 접근:
heroku logs --tail
로 실시간 로그 확인 - 자산 문제 해결:
rails assets:clean
으로 캐시 정리 후 재컴파일
섹션별 세부 요약
1. **실패 원인 분석**
- 의존성 누락 (예:
yarn
미설치) - Node/Ruby 버전 불일치
- 배포 환경 경로 오류
2. **자산 컴파일 실패 해결 방법**
- 로컬 테스트:
RAILS_ENV=production bundle exec rails assets:precompile
- 빌드팩 추가:
```bash
heroku buildpacks:add --index 1 heroku/nodejs
heroku buildpacks:add --index 2 heroku/ruby
```
- package.json 스크립트 추가:
```json
"scripts": {"postinstall": "rails assets:precompile"}
```
3. **환경 변수 오류 해결**
- 변수 설정:
```bash
heroku config:set RAILS_ENV=production SECRET_KEY_BASE=$(rake secret)
heroku config:get SECRET_KEY_BASE # 중복 확인
```
- 디노 재시작:
heroku restart
- 코드 내 검증:
```ruby
raise "SECRET_KEY_BASE missing!" if ENV["SECRET_KEY_BASE"].nil?
```
4. **클래식 오류 사례**
PG::ConnectionBad
:heroku run rails db:migrate
실행EACCES: permission denied
:RUN chown -R app:app /app
명령어 사용- 메모리 제한:
heroku config:set NODE_OPTIONS="--max_old_space_size=2048"
5. **디버깅 전략**
- 로그 분석:
heroku logs --tail
로 실시간 로그 확인 - 로컬 재현:
RAILS_ENV=production bundle exec rails assets:precompile
- 스테이징 환경:
```bash
heroku create my-app-staging --remote staging
```
6. **실제 사례 및 해결**
- CSS 로딩 실패 원인: 자산 컴파일 실패로 인한 정적 캐시 문제
- 해결:
heroku run rails assets:clean
으로 캐시 정리
결론
- 배포 실패 시 로그 확인 → 자산/환경 변수 검증 → 스테이징 환경 활용 순서로 접근
RAILS_ENV
설정 누락 및 빌드팩 순서 오류가 주요 원인 → 반드시 검증- 예제:
heroku run rails assets:clean
으로 오래된 캐시 문제 해결 - 핵심 팁:
package.json
에postinstall
스크립트 추가로 자동 컴파일 적용