Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Not finding static files django 1.9 gunicorn

I am on my way to deployment but when I switched to gunicorn from dev server my static files aren't being found. I ran collectstatic, and the files have been collected.

note in my settings file I print the path to my static files. This is from my gunicorn log:

/home/jcg/code/python/venvs/baseball/baseball_stats/collect_static
Not Found: /static/admin/css/base.css
Not Found: /static/admin/css/dashboard.css

Here is my settings file. I have updated correctly (I hope) settings from the original django 1.6 version.

"""
Django settings for baseball_stats project.

For more information on this file, see
https://docs.djangoproject.com/en/1.6/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.6/ref/settings/
"""

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os

# this for reading environment variables for private values (secret_key, etc)
# copy this to .bashrc or if using virtualvenvwrapper to bin/postactivate script
# EXPORT VARIABLE=thevaluegoeshere
import get_env_variable

BASE_DIR = os.path.dirname(os.path.dirname(__file__))

# Most recent year for statistics
MOST_RECENT = 2013

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '-s*2+cq_niwa&*b%9(0w6$w!*9%d98oe7r6=+m0v+8(^&!10b6'
SECRET_KEY = get_env_variable.get_env_variable('SECRET_KEY')

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

TEMPLATE_DEBUG = True

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'baseball',
    'django.contrib.humanize',
    'bootstrap3',
    # 'debug_toolbar',
    'django_extensions',
    # 'csvimport',
)

MIDDLEWARE_CLASSES = (
    '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 = 'baseball_stats.urls'

WSGI_APPLICATION = 'baseball_stats.wsgi.application'


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

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',
    },
]

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

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

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/New_York'

USE_I18N = True

USE_L10N = True

USE_TZ = True


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

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "collect_static")
print STATIC_ROOT

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',
            ],
        },
    },
]
"""
LOGGING = {
    'version': 1,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'level': 'DEBUG',
            'handlers': ['console'],
        },
    }
}
"""

I looked at this: Django Gunicorn not load static files

But my understanding is gunicorn can do static files, it just isn't as efficient as using nginx. I thought I would do this as a first step before setting up nginx

Running ./manage.py findstatic doesn't find my files, so, I am guessing its my settings file, not the server

like image 577
joel goldstick Avatar asked Feb 19 '16 16:02

joel goldstick


People also ask

Where is Django looking for static files?

Using the collectstatic command, Django looks for all static files in your apps and collects them wherever you told it to, i.e. the STATIC_ROOT . In our case, we are telling Django that when we run python manage.py collectstatic , gather all static files into a folder called staticfiles in our project root directory.

Does Gunicorn serve static files?

Does Gunicorn serve static files? Your application will now serve static assets directly from Gunicorn in production.

Does Django cache static files?

Django caches (or rather the browsers cache) the static files indefinitely during development. Now even after the files are changed, the browsers will serve the stale file from the cache.

How do you serve static files in Django in production?

Serving static files in production. The basic outline of putting static files into production consists of two steps: run the collectstatic command when static files change, then arrange for the collected static files directory ( STATIC_ROOT ) to be moved to the static file server and served.


2 Answers

Third party app

All You need is dj-static package.

pip install dj-static

Configure your static assets in settings.py:

STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

Then, update your wsgi.py file to use dj-static:

from django.core.wsgi import get_wsgi_application
from dj_static import Cling

application = Cling(get_wsgi_application())

Pure Django

Add to Your urls.py

from django.contrib.staticfiles.urls import staticfiles_urlpatterns

...

urlpatterns += staticfiles_urlpatterns()
like image 194
Tomasz Jakub Rup Avatar answered Oct 27 '22 07:10

Tomasz Jakub Rup


you can server the static file from nginx server. In the server setting. https://stackoverflow.com/questions/tagged/django-settings

server {
   listen 80;
   server_name test.com;
   location / {
       proxy_pass http://0.0.0.0:8000;
       proxy_set_header X-Forwarded-Host $server_name;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $http_host;
       proxy_set_header X-Forwarded-Ssl on;
       proxy_redirect off; 
   }
   location /static/ {
       autoindex on;
       alias /home/ec2-user/app/static/;
   }
}   
like image 24
aman kumar Avatar answered Oct 27 '22 07:10

aman kumar