使用WSGI和Apache运行时Python的工作目录

问题描述 投票:9回答:2

我有一个Web应用程序,除其他外,将查询数据库并使用数据创建Excel电子表格。在将文件发送到客户端计算机之前,我需要将电子表格保存到服务器的磁盘。我正在使用Flask框架和openpyxl来生成电子表格。在Flask的开发服务器上运行时,一切正常,但真正的服务器是带有WSGI的Apache2。当我在那里运行时,在尝试保存电子表格时会引发“权限被拒绝”错误。我不知道在Apache / WSGI中运行时Python的工作目录是什么。

有没有办法,可能在WSGI配置文件中,更改工作目录,或以某种方式控制它将保存到哪里?如果可能的话,我想使用相对路径进行保存(它使代码更具可移植性),这就是更改工作目录是最佳解决方案的原因。

apache2 mod-wsgi
2个回答
20
投票

你不应该改变工作目录。

使用:

import os
here = os.path.dirname(__file__)

然后,变量here将包含该代码文件所在的目录。然后,您可以构建相对于此的事物的绝对路径。

database = os.path.join(here, 'database.db')

请注意,您的代码在Apache中运行的用户仍然需要对该目录的读/写访问权限。

与往常一样,请务必阅读文档。文件的相关部分是:


0
投票

我有一个类似的问题,我想使用具有相对路径的glob()。它在我的开发环境中工作,但在mod_wsgi的服务器上没有。我发现here有一个'home ='选项,你可以添加到WSGIDaemonProcess指令来设置你的应用程序的初始工作目录。您可以在虚拟主机文件中找到(在我的系统中/etc/apache2/sites-available/mysite.conf中)

© www.soinside.com 2019 - 2024. All rights reserved.