我使用cPanel并使用passenger_wsgi.py
在我的服务器上部署了一个Django应用程序。问题是,当我试图访问静态文件(如管理CSS文件:static/admin/css/base.css
),我面临404错误。我已经完成了collectstatic
并将PassengerPathInfoFix
方法添加到passenger_wsgi.py
文件,但输出日志是
Not Found:/home/mysite/public_html/build/static/admin/css/base.css
,即使输出路径存在,我可以使用vim
编辑它。
Mysettings.py
:
STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATIC_URL = "/static/"
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
如有任何帮助,不胜感激。
添加到url.py
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
希望这有帮助!
您可以尝试将STATIC_URL更改为STATICFILES_DIRS,这与我一起工作!
STATICFILES_DIRS = [
BASE_DIR / 'static',
BASE_DIR / 'static/admin',
]
感谢Ali的回答,对于有同样问题的人,以下是我所做的步骤。希望对大家有所帮助:
- 确保您的
settings.py
文件包含以下行:
STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATIC_URL = "/static/"
run
python manage.py collectstatic
编辑你的
passenger_wsgi.py
并添加这些行:
# ...
# Import WSGI of your project
# Project Static File Path
cwd = os.getcwd()
sys.path.append(cwd)
sys.path.append(cwd + '/myapp')
SCRIPT_NAME = os.getcwd()
class PassengerPathInfoFix(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
from urllib.parse import unquote
environ['SCRIPT_NAME'] = SCRIPT_NAME
request_uri = unquote(environ['REQUEST_URI'])
script_name = unquote(environ.get('SCRIPT_NAME', ''))
offset = request_uri.startswith(script_name) and len(environ['SCRIPT_NAME']) or 0
environ['PATH_INFO'] = request_uri[offset:].split('?', 1)[0]
return self.app(environ, start_response)
application = PassengerPathInfoFix(application)
- 如果您将Django项目部署在
public_html
的子文件夹中,而不是在public_html
目录中(如我的),请将static
文件夹复制到public_html
或使用ln -s public_html/static/ public_html/subfolder/static/
创建符号链接(重点是static
文件只从您的域/子域基础目录加载)(也许有更好的解决方案,但这解决了我的问题)
所以我把项目移到我的域名的基本目录,它工作了。
安装白噪声,就可以了!
-
pip install whitenoise
-
settings.py:
MIDDLEWARE = [ # ... "django.middleware.security.SecurityMiddleware", "whitenoise.middleware.WhiteNoiseMiddleware", # ... ]