Я хотел бы решить проблему ошибки django webserver collectstatic на сервере ubuntu
Прежде чем я начну свой вопрос, это мой первый раз, чтобы сделать вопрос в stackoverflow! Я надеюсь, что вы все делаете действительно очень хорошо все, что вы делаете.
<я пытаюсь получить статический файл с помощью 'python manage.py collectstatic', но это не работает. Я запускаю свой проект django в
, и использую в качестве веб-сервера, и для WSGI сервера.You have requested to collect static files at the destination
location as specified in your settings.
This will overwrite existing files!
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel: yes
Traceback (most recent call last):
File "manage.py", line 22, in <module>
main()
File "manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/home/devadmin/venvs/bio_platform/lib/python3.8/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
utility.execute()
File "/home/devadmin/venvs/bio_platform/lib/python3.8/site-packages/django/core/management/__init__.py", line 440, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/devadmin/venvs/bio_platform/lib/python3.8/site-packages/django/core/management/base.py", line 414, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/devadmin/venvs/bio_platform/lib/python3.8/site-packages/django/core/management/base.py", line 460, in execute
output = self.handle(*args, **options)
File "/home/devadmin/venvs/bio_platform/lib/python3.8/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 209, in handle
collected = self.collect()
File "/home/devadmin/venvs/bio_platform/lib/python3.8/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 135, in collect
handler(path, prefixed_path, storage)
File "/home/devadmin/venvs/bio_platform/lib/python3.8/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 368, in copy_file
if not self.delete_file(path, prefixed_path, source_storage):
File "/home/devadmin/venvs/bio_platform/lib/python3.8/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 278, in delete_file
if self.storage.exists(prefixed_path):
File "/home/devadmin/venvs/bio_platform/lib/python3.8/site-packages/django/core/files/storage.py", line 362, in exists
return os.path.lexists(self.path(name))
File "/home/devadmin/venvs/bio_platform/lib/python3.8/site-packages/django/contrib/staticfiles/storage.py", line 39, in path
raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.
Я нашел много решений в google, и я предполагаю, что причина в том, что я не установил STATIC_ROOT правильно.
Вот структура dir моего проекта и код ниже;
Как вы могли заметить, я разделяю свои файлы настроек таким образом, Это потому, что я хочу работать с Средой разработки сервера и Локальной средой разработки отдельно.
├── settings
│ │ ├── __pycache__
│ │ ├── base.py
│ │ ├── local.py
│ │ └── prod.py
Вот мой полный код файлов настроек (я удалил приватные части, которые являются IP-адресом).
base.py
local.py
from .base import *
ALLOWED_HOSTS = []
prod.py
from .base import *
import os
ALLOWED_HOSTS = ['blank'] #private part
STATIC_URL = 'static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
#STATIC_ROOT = BASE_DIR / 'static/'
STATICFILES_DIRS = []
# concept addon
Также, вот мой bio_platform.service для сервера nignx.
bio_platform.service
server {
listen 80;
server_name blank; #private part
location = /favicon.ico { access_log off; log_not_found off; }
location /static {
alias /home/devadmin/projects/bio_platform/static;
}
location / {
include proxy_params;
proxy_pass http://unix:/tmp/gunicorn.sock;
}
}
Я сделал некоторые решения, которые даны в google и stackoverflow также, которые выглядят следующим образом:
что я пробую
установите STATIC_ROOT и STATIC_URL на prod.py установить STATIC_ROOT и STATIC_URL на base.py
.
Но, как вы знаете, это не сработало, и ошибка django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path. все еще остается.
Я не знаю, где я должен установить STATIC_ROOT или STATIC_URL, STATICFILES_DIR.
Пожалуйста, помогите мне, ребята. ....
Я нашел ошибку в своем проекте. Проблема была вызвана настройкой пути, который автоматически приносит настройки prod.py из папки venvs.
Я создал файл bio_platform.sh по пути
~/venvs/
перед
#!/bin/bash
cd ~/projects/bio_paltform
export DJANGO_SETTINGS_MODULE=config.settings.prod
. ~/venvs/bio_paltform/bin/activate
Как вы, ребята, могли видеть, что я неправильно напечатал bio_paltform.
Поэтому я изменяю bio_paltform на bio_platform.
после
#!/bin/bash
cd ~/projects/bio_platform
export DJANGO_SETTINGS_MODULE=config.settings.prod
. ~/venvs/bio_platform/bin/activate
После того, как я изменил этот файл, python managy.py collectstatic заказ работает.
$ python manage.py collectstatic
You have requested to collect static files at the destination
location as specified in your settings:
/home/devadmin/projects/bio_platform/static
This will overwrite existing files!
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel: yes
128 static files copied to '/home/devadmin/projects/bio_platform/static'.