在 Apache 上部署 Django 应用程序后媒体文件夹的 FileNotFoundError

Posted

技术标签:

【中文标题】在 Apache 上部署 Django 应用程序后媒体文件夹的 FileNotFoundError【英文标题】:FileNotFoundError for the media folder after deploying Django app on Apache 【发布时间】:2019-09-21 10:53:48 【问题描述】:

我有一个 Django 应用程序,我刚刚添加到 Apache 上已经部署的 Django web 中。 因为是Apache跑的,所以media文件夹的路径好像不一样。

我的应用程序允许用户上传一个 excel 文件,然后更改数字并保存为 csv 文件。

(仅显示相关文件夹/代码 sn-ps) 当前目录

converts\
    _init_.py
    apps.py
    forms.py
    models.py
    converter.py
    urls.py
    views.py
main\
    settings.py
    urls.py
    wsgi.py
meida\
    excels\
        example.xlsx
    csvs\
        example.csv
static\
manage.py

settings.py

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

main\urls.py

urlpatterns = [
    path('', RedirectView.as_view(url='/converts/')),
    path('converts/', include('converts.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

导致问题的部分在converts/converter.py中如下:

def convertExcel(name):
    path = 'media/excels/'
    key = path + name
    wb = load_workbook(key)

最初在开发中,视图中的一个函数调用 convertExcel(example.xlsx),工作簿通过 media/excels/example.xlsx 找到正确的文件以处理加载的工作簿。但在生产服务器中,它给出了

FileNotFoundError: [Errno 2] No such file or directory: 'media/excels/example.xlsx'

我的问题是: 我是否必须从 apache2.conf 所在的位置回溯才能找到路径?或者有没有办法设置我的 django 项目的路径,这样我就可以在我的 convertExcel() 中将路径设置为“media/excels”?或者有没有其他方法可以调用上传的工作簿?

任何形式的帮助/评论将不胜感激。 如果需要更多信息,请发表评论。

【问题讨论】:

【参考方案1】:

我的猜测是您应该使用 MEDIA_ROOT 变量,因为它指向上传的文件。所以你会有

def convertExcel(name):
    from django.conf import settings
    path = os.path.join(settings.MEDIA_ROOT, 'excels')
    key = os.path.join(path, name)
    wb = load_workbook(key)

【讨论】:

运行后我收到完全相同的错误:( Mo 这样的文件或目录'media/excels/example.xlsx' apache 是否指向这个目录?上传后文件在MEDIA_ROOT吗? 如何知道它是否指向这个目录?考虑到它指出它找不到的目录路径,从媒体开始,我猜它指向不正确。 是的,你要配置apache,例如:docs.djangoproject.com/en/2.2/howto/deployment/wsgi/modwsgi/… I receive exact same error after running it :( @JohnGear 这意味着您没有更新代码/没有部署它/没有重新启动应用程序 - 否则错误消息将包含完整的 absolute 路径。跨度>

以上是关于在 Apache 上部署 Django 应用程序后媒体文件夹的 FileNotFoundError的主要内容,如果未能解决你的问题,请参考以下文章

在 Apache 上部署 Django - 目录布局

关于在 Apache + mod_python 上部署 Django 项目

使用 mod_wsgi 在 Apache 上部署多个 django 应用程序

使用 mod_wsgi 在 Ubuntu 16.04 apache2 上部署 Django 应用程序

无法使用 mod-wsgi 在 Apache 上部署 django

在 digitalocean 上部署后未加载静态文件