django heroku error

Han07·2021년 4월 30일
0

삽질 기록

목록 보기
2/2
post-thumbnail
post-custom-banner

1. Requested runtime (python-3.8.0) is not available for this stack (heroku-20).

remote: -----> Building on the Heroku-20 stack
remote: -----> Using buildpack: heroku/python
remote: -----> Python app detected
remote: -----> Using Python version specified in runtime.txt
remote:  !     Requested runtime (python-3.8.0) is not available for this stack (heroku-20).

지원하는 python version이 아니다.

heroku가 지원해주는 python version

python-3.9.4 on all supported stacks
python-3.8.9 on all supported stacks
python-3.7.10 on all supported stacks
python-3.6.13 on all supported stacks

runtime.txt를 수정하자.


2. ImportError: cannot import name 'my_settings' from 'backend' (/tmp/build_99a573f0/backend/backend/init.py)

my_settings.py에 SECRET_KEY, DATABASE 등 실행에 필요한 정보가 있음. .gitignore에 포함했기 때문에 생긴 에러. heroku에서는 secret file을 안쓰는게 좋다. 대신 cofing vars라는 기능을 제공한다.

app의 settings에 가면 config vars가 있다.

이런 식으로 추가해주고

os.environ['key값']

이렇게 사용하면 된다.

  • terminal로 설정하기
heroku config:set KEY:VALUE

3. App not compatible with buildpack

buildpack이 설정이 안됐다.

heroku buildpacks:set heroku/python
heroku create --buildpack heroku/python

깃허브에 push 한 뒤 다시 git push heroku main을 진행한다.

동일한 에러가 다시 발생했다면

  1. requirements.txt, Procfile, runtime.txt가 있는지 확인
  2. 1번의 파일들이 루트 폴더에 있는지 확인!!(manage.py가 있는 곳이 아니라 깃허브 클론 받은 폴더에 있는지 확인)

위 사항을 확인하자. 파일명이 틀려도 안되고 대소문자도 모두 구분해야 한다.


4. error: src refspec master does not match any
error: 레퍼런스를 'https://git.heroku.com/mokids.git'에 푸시하는데 실패했습니다

github master branch는 main으로 이름이 변경됐다. git push heroku main으로 변경한다


5. git push heroku :main

push 한 뒤 다시 진행한다. 안되면 3번을 확인한다.


6. WhiteNoiseMiddleware error

  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
remote:          File "<frozen importlib._bootstrap>", line 991, in _find_and_load
remote:          File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
remote:          File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
remote:          File "<frozen importlib._bootstrap_external>", line 783, in exec_module
remote:          File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
remote:          File "/tmp/build_4091155f/backend/backend/settings.py", line 34, in <module>
remote:            django_heroku.settings(locals())
remote:          File "/app/.heroku/python/lib/python3.8/site-packages/django_heroku/core.py", line 99, in settings
remote:            config['MIDDLEWARE'] = tuple(['whitenoise.middleware.WhiteNoiseMiddleware'] + list(config['MIDDLEWARE']))
remote:        KeyError: 'MIDDLEWARE'
remote: 
remote:  !     Error while running '$ python backend/manage.py collectstatic --noinput'.
remote:        See traceback above for details.
remote: 
remote:        You may need to update application code to resolve this error.
remote:        Or, you can disable collectstatic for this application:
remote: 
remote:           $ heroku config:set DISABLE_COLLECTSTATIC=1
  1. Middleware에 추가한다.
  MIDDLEWARE = [
    'whitenoise.middleware.WhiteNoiseMiddleware', #Add
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

해도 안되면 아래 명령어를 사용한다.

heroku config:set DISABLE_COLLECTSTATIC=1
post-custom-banner

0개의 댓글