Django 在服务器上找不到静态文件,但在本地机器上工作正常

Posted

技术标签:

【中文标题】Django 在服务器上找不到静态文件,但在本地机器上工作正常【英文标题】:Django cant find static files on server, but works fine on local machine 【发布时间】:2018-01-19 14:51:57 【问题描述】:

我有一个使用 django 运行的 vps,我正在从我的本地计算机开发站点,并通过 git 将其推送到 vps。

在我的本地机器上,我刚刚安装了 initializr,并将所有脚本更改为使用静态位置,在那里一切正常,但是当我将它推送到我的 vps 时,它找到的只是 .html 文件,它找不到 .css 或 .js 脚本 vps 正在运行 Debian 8.* Minimal,带有 nginx 和 gunicorn 我的本地机器正在运行 MacOs 两台机器都运行 Python 3.6.2 和 Django 1.11.4

以下是 settings.py 中的相关设置:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
...
TEMPLATES = [
    
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "BaseFiles/templates")],
        'APP_DIRS': True,
        'OPTIONS': 
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        ,
    ,
]
...
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "BaseFiles/static"),
)

我的路径是:

Project_folder/ -> BaseFiles  |  Django_project | manage.py
BaseFiles/ -> static  |  templates

更新 好的,事实证明,如果我从 vps 手动运行 django,它会很好地加载 css 和 js 文件,所以问题被隔离到 Nginx

Nginx:

server 
        listen 80;
        server_name domaine.com;

    location = /favicon.ico  access_log off; log_not_found off; 
    location /static/ 
        root /home/user/project_folder;
    

原来我的 nginx 站点文件配置错误。 在 project_folder 之后添加以下内容后,它工作正常

/BaseFiles

【问题讨论】:

请添加您拥有的错误跟踪。 没有错误跟踪我只是得到一个没有 css 或 javascript 的 html 页面,consol 只是说它在 domain.com/static/* 上找不到文件 在模式DEBUG=False的服务器django上,在本地机器DEBUG=True上?如果是这样,答案可以帮助你:***.com/a/6406429/8060120 两者都设置为 True :) 正如我所说,我只是得到了控制台告诉静态无法访问的 html 页面,页面 dossent 崩溃 如果你从控制台运行 django,在 vps 上一切正常吗? 【参考方案1】:

Nginx 没有找到你的静态文件。

你需要收集静态文件并在你的setting.py中设置静态文件夹的位置。

另一种方法是安装 whitenoise ( pip install whitenoise )。这个插件可以解决问题 -> https://djangopackages.org/packages/p/whitenoise/

【讨论】:

【参考方案2】:

试试这个:

在你的 settings.py 中给一个静态根目录

STATIC_ROOT = '/var/www/project/static/'

在你的 nginx 中:

location /static/ 
    alias /var/www/project/static/;

python3 manage.py collectstaticsudo service nginx restart 这应该可以工作。 希望这可以帮助。谢谢。

【讨论】:

以上是关于Django 在服务器上找不到静态文件,但在本地机器上工作正常的主要内容,如果未能解决你的问题,请参考以下文章

DJANGO:静态文件未在实时服务器中加载(但在本地加载)?

Django 表单在生产与 LH 上找不到正确的 ID int 增量

Elastic Beanstalk 在哪里存储我的 Django 应用程序的文件?

发布在本地服务器上找不到 php 文件。

django - 看不到从 apache 上传的媒体文件

找不到静态文件 - 在 Heroku 上部署 Django