Missing staticfiles manifest entry on heroku app, runs fine locally

130 views
Skip to first unread message

James

unread,
Jun 25, 2020, 7:06:24 PM6/25/20
to Django users
Hi everyone,

I'm getting server error 500 when I deploy my app to heroku. The logs show an issue with staticfiles, even though I'm serving static and media from an S3 bucket:

ValueError: Missing staticfiles manifest entry for 'images/favicon.ico'

What's odd is that run I run locally, even with DEBUG=False, the app runs fine and I verified that the images are loading from the S3 bucket (both media and static). However, for some reason heroku is unable to load from S3.

Settings.py:

import os
import storages
import django_heroku


# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR
= os.path.dirname(os.path.dirname(os.path.abspath(__file__)))




# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY
= '***'


# SECURITY WARNING: don't run with debug turned on in production!
DEBUG
= (os.environ.get('DEBUG_VALUE') == 'True')
#DEBUG = False


ALLOWED_HOSTS
= ['localhost', 'testapp.herokuapp.com', 'testapp.tv']




# Application definition
# NOTE: django_cleanup should be placed last in INSTALLED_APPS.
INSTALLED_APPS
= [
   
'django.contrib.admin',
   
'django.contrib.auth',
   
'django.contrib.contenttypes',
   
'django.contrib.sessions',
   
'django.contrib.messages',
   
'django.contrib.staticfiles',
   
'taggit',
   
'storages',
   
'post.apps.PostConfig',
   
'ckeditor',
   
'sorl.thumbnail',
   
'django_cleanup.apps.CleanupConfig',
]


MIDDLEWARE
= [
   
'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',
]


ROOT_URLCONF
= 'testapp.urls'


TEMPLATES
= [
   
{
       
'BACKEND': 'django.template.backends.django.DjangoTemplates',
       
'DIRS': [],
       
'APP_DIRS': True,
       
'OPTIONS': {
           
'context_processors': [
               
'django.template.context_processors.debug',
               
'django.template.context_processors.request',
               
'django.contrib.auth.context_processors.auth',
               
'django.contrib.messages.context_processors.messages',
           
],
       
},
   
},
]


WSGI_APPLICATION
= 'testapp.wsgi.application'




# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases


DATABASES
= {
   
'default': {
       
'ENGINE': 'django.db.backends.sqlite3',
       
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
   
}
}




# Password validation
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators


AUTH_PASSWORD_VALIDATORS
= [
   
{
       
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
   
},
   
{
       
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
   
},
   
{
       
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
   
},
   
{
       
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
   
},
]




# Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/


LANGUAGE_CODE
= 'en-us'


TIME_ZONE
= 'UTC'


USE_I18N
= True


USE_L10N
= True


USE_TZ
= True




# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/


# STATIC_URL = '/static/'


# # Add these new lines
# STATICFILES_DIRS = (
#     os.path.join(BASE_DIR, 'static'),
# )


# STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')


# Form messages
from django.contrib.messages import constants as messages


MESSAGE_TAGS
= {
    messages
.DEBUG: 'alert-info',
    messages
.INFO: 'alert-info',
    messages
.SUCCESS: 'alert-success',
    messages
.WARNING: 'alert-warning',
    messages
.ERROR: 'alert-danger',
}


# Memcached settings
CACHES
= {
   
'default': {
       
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
       
'LOCATION': '127.0.0.1:11211',
   
}
}


# Amazon S3 settings and variables
AWS_ACCESS_KEY_ID
= os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY
= os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME
= 'testapp-files'


AWS_S3_FILE_OVERWRITE
= False
AWS_DEFAULT_ACL
= None


AWS_LOCATION
= 'static'
AWS_S3_CUSTOM_DOMAIN
='%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS
= {    
     
'CacheControl': 'max-age=86400',
}


DEFAULT_FILE_STORAGE
= 'storages.backends.s3boto3.S3Boto3Storage'
#DEFAULT_FILE_STORAGE = 'testapp.storage_backends.MediaStorage'
STATICFILES_STORAGE
= "storages.backends.s3boto3.S3Boto3Storage"
STATICFILES_DIRS
= [
    os
.path.join(BASE_DIR, 'static'),
]
STATIC_URL
='https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
ADMIN_MEDIA_PREFIX
= STATIC_URL + 'admin/'
STATICFILES_FINDERS
= (           'django.contrib.staticfiles.finders.FileSystemFinder',    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)


AWS_QUERYSTRING_AUTH
= False




django_heroku
.settings(locals())

Any help would be greatly appreciated. Thanks!!

Reply all
Reply to author
Forward
0 new messages