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

时间:2012-08-22 21:38:18

标签: apache2 mod-wsgi

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

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

2 个答案:

答案 0 :(得分:20)

您不应该更改工作目录。

使用:

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

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

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

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

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

答案 1 :(得分:0)

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