You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署到Ubuntu+Apache服务器后Django无法找到文件的排查求助

问题原因与解决方案

你遇到的核心问题是Python进程的工作目录在本地和服务器环境不一致:

  • 本地用virtualenv运行时,你的工作目录是项目根目录(mydashboard),所以相对路径"reports/dash_diversos.csv"能正确定位到文件。
  • 而Apache运行WSGI应用时,默认的工作目录是Apache的系统目录(比如/var/www/html或/etc/apache2),这个路径下根本没有reports文件夹,自然会抛出文件找不到的错误。

最佳解决方案:使用绝对路径定位文件

最可靠的方式是基于Django项目的根目录(BASE_DIR)来拼接文件的绝对路径,这样不管运行环境的工作目录是什么,都能准确找到文件。

修改你的utils.py代码如下:

from django.conf import settings
import os

def set_vehicles_negotiations(self):
    # 利用settings里的BASE_DIR(项目根目录)拼接绝对路径
    csv_file_path = os.path.join(settings.BASE_DIR, 'reports', 'dash_diversos.csv')
    with open(csv_file_path, 'rt', encoding='utf8') as csvfile:
        # 你的后续代码
        ...

备选方案:通过文件路径推导项目根(不依赖Django settings)

如果不想导入Django的settings模块,也可以通过当前utils.py的文件位置来推导项目根目录:

import os

# 获取当前utils.py文件的绝对路径
current_file_path = os.path.abspath(__file__)
# 获取utils.py所在的dashboard目录
dashboard_dir = os.path.dirname(current_file_path)
# 获取项目根目录(dashboard的上一级)
project_root = os.path.dirname(dashboard_dir)
# 拼接csv文件路径
csv_file_path = os.path.join(project_root, 'reports', 'dash_diversos.csv')

def set_vehicles_negotiations(self):
    with open(csv_file_path, 'rt', encoding='utf8') as csvfile:
        # 你的后续代码
        ...

额外检查事项

  1. 确认文件与目录存在:登录服务器,检查/var/www/dashboard/reports/dash_diversos.csv是否存在,确保部署时把reports文件夹和文件一起上传了。
  2. 设置正确的文件权限:Apache的运行用户通常是www-data,需要赋予该用户读取文件的权限:
    # 设置文件所属用户组为www-data
    sudo chown www-data:www-data /var/www/dashboard/reports/dash_diversos.csv
    # 设置文件可读权限
    sudo chmod 644 /var/www/dashboard/reports/dash_diversos.csv
    
  3. 重启Apache服务:修改代码或权限后,记得重启Apache使变更生效:
    sudo systemctl restart apache2
    

内容的提问来源于stack exchange,提问作者William Zimmermann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:15:34