Ошибка Django 403 для статических файлов на виртуальном хостинге с использованием passenger_wsgi

Я пытаюсь запустить свое приложение Django на виртуальном хостинге, используя passenger_wsgi (следуя инструкции хостинг-провайдера).

Поскольку приложение предназначено для основного домена, я установил его, используя следующее расположение папок:

    public_html
      django
        static
          css
          js
          images
        SMC_website
        templates

В файле settings.py у меня есть:

STATIC_URL = 'static/'
STATICFILES_DIRS = [
    '/home/xxxxxx/public_html/django/static/',
    '/home/xxxxxx/public_html/django/static/css',
    '/home/xxxxxx/public_html/django/static/js',
    '/home/xxxxxx/public_html/django/static/images',
    ]

В urls.py у меня есть:

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r"^$", views.index, name="Home Page"),
] 

urlpatterns += static(settings.STATIC_URL,
                      document_root=os.path.join(settings.BASE_DIR, 'static'))

Когда я пробую "static(settings.STATIC_URL,document_root=os.path.join(settings.BASE_DIR, 'static'))" в оболочке django manage.py, я получаю пустой список ([]). Не уверен, почему, и является ли это причиной моей проблемы.

Приложение запускается, извлекает данные из базы данных, но выдает ошибку 403 для любого содержимого, доступного из статических папок (css, js или изображения).

У меня есть эти разрешения на папки:

drwxr-x--- 2 xxxxxx xxxxxx 4096 Dec 17 18:30 css
drwxr-x--- 8 xxxxxx xxxxxx 4096 Dec 17 18:30 images
drwxr-x--- 3 xxxxxx xxxxxx 4096 Dec 17 18:30 js

drwxr-xr-x  5 xxxxxx xxxxxx   4096 Dec 11 14:24 SMC_website
drwxr-xr-x  3 xxxxxx xxxxxx   4096 Dec 11 14:24 logs
-rw-r--r--  1 xxxxxx xxxxxx    689 Dec 11 14:24 manage.py
-rw-r--r--  1 xxxxxx xxxxxx   1442 Dec 17 18:08 passenger_wsgi.py
-rw-r--r--  1 xxxxxx xxxxxx 245760 Dec 11 14:24 smcDB.sqlite3
drwxr-xr-x 10 xxxxxx xxxxxx   4096 Dec 11 14:31 static

the xxxxxx is the User Name and it is the same as the folder in settings.py above

В отладчике браузера я вижу ожидаемые урлы для статического содержимого, например:

<script type="text/javascript" src="https://southmetrochorale.org/static/js/smc.js"></script> 

Есть предложение, как решить эту ошибку 403?

Итак, сначала вам нужно указать вашу STATIC_ROOT внутри settings.py. Это объявляет папку, из которой вы хотите обслуживать ваши статические файлы.

Затем вы выполняете команду python manage.py collectstatic. Это вытащит все ваши статические файлы из вашей STATICFILES_DIRS и организует их в папке, которую вы объявили в STATIC_ROOT ранее.

Эта часть:

urlpatterns += static(settings.STATIC_URL,
                      document_root=os.path.join(settings.BASE_DIR, 'static'))

работает только внутри django-testserver с DEBUG=True.

Проблема, с которой вы сталкиваетесь, - это производство против разработки.

Для дальнейшего чтения рекомендую Как развернуть статические файлы в производстве

Я нашел решение этой проблемы. Поскольку приложение Django находится в папке (django) в основном расположении домена (public_html) -> public_html/django, а папка static находится в public_html/django/static, мне нужно было использовать: STATIC_URL = "django/static/"

Все в порядке, все статические файлы теперь обслуживаются.

Вернуться на верх