Why gunicorn cannot find static files?

Question:

Running Django dev server has no problem: ‘python manage.py runserver 9000’
But if use gunicorn, it complains:

http://innovindex.com/pubmed/static/js/jquery-3.2.1.min.js

Why gunicorn cannot find a local jquery but Django can?

The settings are:

settings.py (seems not related):

STATIC_URL = '/pubmed/static/'

in ‘/etc/nginx/sites-enabled/django’

location /static {
   alias /home/django/innovindex/pubmed/static/;
}

And my app looks like this:

/home/django/innovindex

is where the ‘manage.py’ sits.

THANK YOU SO MUCH !!!

Asked By: Daming Lu

||

Answers:

From Deploying static files in the Django documentation, you must run the collectstatic command in addition to setting the STATIC_ROOT setting.

First make sure that you’re STATIC_ROOT is set to the correct path that matches your nginx config:

STATIC_ROOT = '/home/django/innovindex/pubmed/static/'

Note that this is an absolute path.

Then run:

python manage.py collectstatic

in your project directory.

This will copy all of your static files into /home/django/innovindex/pubmed/static/

Answered By: roob

I spent a lot of time trying to figure this out until I found that the below must be in your main urls.py. Just add those two lines.

from django.contrib.staticfiles.urls import staticfiles_urlpatterns

# ... 

urlpatterns += staticfiles_urlpatterns()

Answered By: Robin