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
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? Your application will now serve static assets directly from Gunicorn in production.
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.
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.
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())
Add to Your urls.py
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
...
urlpatterns += staticfiles_urlpatterns()
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/;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With