在 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 + mod_python 上部署 Django 项目
使用 mod_wsgi 在 Apache 上部署多个 django 应用程序
使用 mod_wsgi 在 Ubuntu 16.04 apache2 上部署 Django 应用程序