ashes999
ashes999

Reputation: 1324

Media file not being found in production Django-Heroku: returns 404 error

I have some default images in my media folder in Djang. However, on my website, I cannot see the images being displayed and I get a 404 error.

Now my project folder tree is(project name is register):

register
-- live-static
---- static-root
---- media-root
------ defaults

and my media and static files settings are:

STATIC_URL = '/static/'
STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'live-static', 'static-root')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'live-static', 'media-root')

STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

And inside my urls.py in the same folder as wsgi.py I have:

urlpatterns = [ 
    """
    My other urls
    """ 
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT ) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

My static files are loaded and the server can retrieve them, however, the images that I added to my folders in media-root are returning a 404 error by the server. Why is this happening as I have already also set STATICFILES_STORAGE as well?

Upvotes: 0

Views: 452

Answers (2)

azhar
azhar

Reputation: 380

Update your setting file like this

there is no need to change any thing else

in urls.py change the urlpatterns to. remove STATIC_ROOT etc

+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

in setting.py like this. remove other file settings like STATICFILES_STORAGE

MEDIA_URL = '/media/'
STATIC_URL = '/static/'



STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')
]
#if your media folder is in public_html which contain the media file
MEDIA_ROOT = '/home/yourusername/public_html/media'
STATIC_ROOT = '/home/yourusername/public_html/static'

#if your media folder is in other_folder which contain the media file
MEDIA_ROOT = '/home/yourusername/other_folder /media'
STATIC_ROOT = '/home/yourusername/other_folder /static'

Upvotes: 0

nightwolfgroup
nightwolfgroup

Reputation: 173

This is something I got hung up on with my first Heroku deploy. Since Heroku projects run on dynos, they eventually go to sleep if there is not a request within a certain period of time. When the dyno restarts, it does not save the uploaded data. Here is a link to some information from Heroku: https://help.heroku.com/K1PPS2WM/why-are-my-file-uploads-missing-deleted

What I ended up doing is setting up an Amazon S3 bucket for storage of these files. Dennis Ivy did a video explaining how to do this: https://youtu.be/inQyZ7zFMHM

Upvotes: 1

Related Questions