Running collectstatic on server : AttributeError: 'PosixPath' object has no attribute 'startswith'
Running collectstatic on server : AttributeError: 'PosixPath' object has no attribute 'startswith'
在使用 nginx、gunicorn、django 和 virtualenv 在数字海洋上的服务器上部署后,我尝试使用 collectstatic:
python manage.py collectstatic --settings=config.settings.production
如您所见,我有多个设置文件。一个基地,一个本地和一个生产设置文件。以下是错误:
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
utility.execute()
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 355, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/core/management/base.py", line 330, in execute
output = self.handle(*args, **options)
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 173, in handle
if self.is_local_storage() and self.storage.location:
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/utils/functional.py", line 239, in inner
return func(self._wrapped, *args)
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/utils/functional.py", line 35, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/core/files/storage.py", line 283, in location
return abspathu(self.base_location)
File "/home/tony/vp/vpenv/lib/python3.5/posixpath.py", line 357, in abspath
if not isabs(path):
File "/home/tony/vp/vpenv/lib/python3.5/posixpath.py", line 64, in isabs
return s.startswith(sep)
AttributeError: 'PosixPath' object has no attribute 'startswith'
我的 production.py
设置文件包含以下内容:
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL = 'media/'
STATIC_ROOT = BASE_DIR / 'static'
我的基础目录如下(从基础设置文件导入):
BASE_DIR = Path(__file__).resolve().parent.parent.parent
可能是什么原因?
您正在使用 Python 3.5。支持 Path objects in the os module was added in Python 3.6。您可以:
升级到Python 3.6;或
避免使用路径对象:
BASE_DIR = os.path.abspath(os.path.join(__file__, '../../../'))
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
这是我之前的设置。我正在使用 Python 3.5。 Django 2.1.
BASE_DIR = Path(__file__).resolve().parent.parent.parent
STATIC_ROOT = BASE_DIR / 'static'
我只改变了一件事:
STATIC_ROOT = str(BASE_DIR / 'static')
它运行良好。
在使用 nginx、gunicorn、django 和 virtualenv 在数字海洋上的服务器上部署后,我尝试使用 collectstatic:
python manage.py collectstatic --settings=config.settings.production
如您所见,我有多个设置文件。一个基地,一个本地和一个生产设置文件。以下是错误:
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
utility.execute()
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 355, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/core/management/base.py", line 330, in execute
output = self.handle(*args, **options)
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 173, in handle
if self.is_local_storage() and self.storage.location:
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/utils/functional.py", line 239, in inner
return func(self._wrapped, *args)
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/utils/functional.py", line 35, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/tony/vp/vpenv/lib/python3.5/site-packages/django/core/files/storage.py", line 283, in location
return abspathu(self.base_location)
File "/home/tony/vp/vpenv/lib/python3.5/posixpath.py", line 357, in abspath
if not isabs(path):
File "/home/tony/vp/vpenv/lib/python3.5/posixpath.py", line 64, in isabs
return s.startswith(sep)
AttributeError: 'PosixPath' object has no attribute 'startswith'
我的 production.py
设置文件包含以下内容:
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL = 'media/'
STATIC_ROOT = BASE_DIR / 'static'
我的基础目录如下(从基础设置文件导入):
BASE_DIR = Path(__file__).resolve().parent.parent.parent
可能是什么原因?
您正在使用 Python 3.5。支持 Path objects in the os module was added in Python 3.6。您可以:
升级到Python 3.6;或
避免使用路径对象:
BASE_DIR = os.path.abspath(os.path.join(__file__, '../../../')) MEDIA_ROOT = os.path.join(BASE_DIR, 'media') STATIC_ROOT = os.path.join(BASE_DIR, 'static')
这是我之前的设置。我正在使用 Python 3.5。 Django 2.1.
BASE_DIR = Path(__file__).resolve().parent.parent.parent
STATIC_ROOT = BASE_DIR / 'static'
我只改变了一件事:
STATIC_ROOT = str(BASE_DIR / 'static')
它运行良好。