python==2.7.5
, django==1.11.10
, gunicorn==19.7.1
, RHEL 7.4
У меня на работе django
проект, написанный не мной.
Он находился в домашнем каталоге eventcat
пользователя, и со временем нам не хватило места на диске. Я должен был перенести проект на /data/
.
После того, как я переместил каталог проекта и настроил новую среду, я столкнулся с проблемой, что статические файлы не загружаются и выдают ошибку 403 forbidden
.
Хорошо, я знаю, что gunicorn
не должен обслуживать статические файлы на производстве, но это внутренний проект с низкой нагрузкой. Я должен иметь дело с этим как есть.
Сервер запускается с помощью собственного сценария (я изменил строку среды на новый путь):
#!/bin/sh
. ~/.bash_profile
. /data/eventcat/env/bin/activate
exec gunicorn -c gunicorn.conf.py eventcat.wsgi:application
gunicorn.conf.py
состоит из:
bind = '127.0.0.1:8000'
backlog = 2048
workers = 1
worker_class = 'sync'
worker_connections = 1000
timeout = 120
keepalive = 2
spew = False
daemon = True
pidfile = 'eventcat.pid'
umask = 0
user = None
group = None
tmp_upload_dir = None
errorlog = 'er.log'
loglevel = 'debug'
accesslog = 'ac.log'
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
proc_name = None
def post_fork(server, worker):
server.log.info("Worker spawned (pid: %s)", worker.pid)
def pre_fork(server, worker):
pass
def pre_exec(server):
server.log.info("Forked child, re-executing.")
def when_ready(server):
server.log.info("Server is ready. Spawning workers")
def worker_int(worker):
worker.log.info("worker received INT or QUIT signal")
import threading, sys, traceback
id2name = dict([(th.identm, th.name) for th in threading.enumerate()])
code = []
for threadId, stack in sys._current_frames().items():
code.append("\n# Thread: %s(%d)" % (id2name.get(threadId, ""), threadId))
for filename, lineno, name, line in traceback.exctract_stack(stack):
code.append('File: "%s", line %d, in %s' %(filename, lineno, name))
if line:
code.append(" %s" % (line.strip()))
worker.log.debug("\n".join(code))
def worker_abort(worker):
worker.log.info("worker received SIGABRT signal")
Все файлы в каталоге static
принадлежат пользователю eventcat
, так же как и сам каталог.
Я не смог найти никакой полезной информации в er.log
и ac.log
.
Сервер работает по протоколу https
, а в каталоге проекта ssl.conf
. У него есть псевдонимы для static
и media
, указывающие на предыдущее местоположение проекта, и я изменил все эти записи на новые. Хотя я не мог найти, где этот файл конфигурации используется.
Пожалуйста, посоветуйте, как мне выяснить причину проблемы. Какие файлы конфигурации или что-то мне нужно посмотреть?
UPDATE :
Благодаря @ruddra, gunicorn
не служил статическому вообще. Это было httpd
. После внесения изменений в конфиг httpd все работает.