Невозможно выполнить push в heroku с помощью cloudinary, хранящего мои статические файлы
Я пытаюсь использовать cloudinary для хранения медиа и статических файлов для моего проекта django. Сначала я изменил настройки так, чтобы медиа файлы хранились в cloudinary и переместил их в heroku, и все работало нормально, за исключением того, что статические файлы не загружались. Поэтому я снова изменил настройки так, чтобы статические файлы также хранились в cloudinary. Локально все работает нормально с DEBUG=False
. Когда я вижу источник страницы html локально, он получает файлы css и javascript из cloudinary. Затем я попытался перенести его на heroku с помощью git push heroku master
. Но я получаю следующую ошибку в журналах heroku:
У меня уже есть CLOUD_NAME
, API_KEY
и API_SECRET
в качестве переменных окружения на heroku.
Он также показывает The command '/bin/sh -c python manage.py collectstatic --noinput' returned a non-zero code: 1
, который находится в моем DockerFile
:
FROM python:3.10
# setting work directory
WORKDIR /usr/src/app
# env variables
ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWEITEBYTECODE 1
ENV DEBUG 0
# install psycopg dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
&& rm -rf /var/lib/apt/lists/*
# install dependencies
RUN pip install --upgrade pip
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
RUN python manage.py collectstatic --noinput
RUN adduser -u 99 myuser
USER myuser
CMD gunicorn ramrobazar.wsgi:application --bind 0.0.0.0:$PORT
А вот мой settings.py
:
INSTALLED_APPS = [
'phonenumber_field',
'ramrobazar.account.apps.AccountConfig',
'ramrobazar.dashboard.apps.DashboardConfig',
'ramrobazar.inventory.apps.InventoryConfig',
'ramrobazar.drf.apps.DrfConfig',
'ramrobazar.demo.apps.DemoConfig',
'mptt',
'rest_framework',
'rest_framework.authtoken',
'rest_framework_simplejwt.token_blacklist',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'cloudinary_storage',
'django.contrib.staticfiles',
'cloudinary',
'corsheaders',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'corsheaders.middleware.CorsMiddleware',
'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',
]
STATIC_URL = 'static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_STORAGE = 'cloudinary_storage.storage.StaticHashedCloudinaryStorage'
MEDIA_URL = 'media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
CLOUDINARY_STORAGE = {
'CLOUD_NAME': os.environ.get('CLOUD_NAME'),
'API_KEY': os.environ.get('API_KEY'),
'API_SECRET': os.environ.get('API_SECRET'),
}
DEFAULT_FILE_STORAGE = 'cloudinary_storage.storage.MediaCloudinaryStorage'
Это мой первый опыт использования heroku и cloudinary. Если у кого-то есть идеи о том, в чем может быть проблема, пожалуйста, поделитесь ими. Если требуется дополнительная информация, пожалуйста, спрашивайте.