【发布时间】:2020-07-22 20:19:11
【问题描述】:
问题:
我收到以下错误
"PermissionError: [Errno 13] 权限被拒绝: '/home/[用户]/daily_events_20200722.txt'
从这行代码:
with open(settings.HOME_PATH + f'daily_events_{time.strftime("%Y%m%d")}.txt', 'a') as fileobject:
我尝试过的: 这是我尝试的第四个“位置”。我尝试的其他目录是 init.py 文件所在的目录和该目录的父目录(例如 /var/www/FlaskApp/FlaskApp/ 和 /var/www/FlaskApp/),我的“ home”目录和/tmp。
我应该在这里提到,将应用程序配置为写入 /tmp 目录消除了权限错误,但没有文件被写入。没有错误,代码继续愉快地通过我的代码部分,就好像它编写了文件一样,然后在不同的地方出错(不相关的错误)进一步向下。
更新:我认为为什么没有文件被写入 /tmp 的答案是 apache2 重定向输出,如此处所述: https://unix.stackexchange.com/questions/167835/where-apaches-tmp-located, 所以我将放弃写入 /tmp 作为解决方案并集中精力 关于权限问题。
如果我能理解 apache2 的凭据,那将非常有帮助 我的烧瓶应用程序将在尝试写入文件时使用。
我还为所有三个尝试过的目录(例如 user:rwx、group:r-x、others:r-x 最初尝试过其他人:rwx)的所有权和权限 (chmod) 进行了修改。还尝试了 root 和 [user ] 作为所有提到的目录及其父目录的所有者 (chown)。
我还尝试将 /etc/apache2/sites-available/ 中的 FlaskApp.conf 文件更改为:
<VirtualHost *:80>
ServerName [serverip]
ServerAdmin admin@[mydomain].com
WSGIScriptAlias / /var/www/FlaskApp/FlaskApp.wsgi
<Directory /var/www/FlaskApp/FlaskApp/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/FlaskApp/FlaskApp/static
<Directory /var/www/FlaskApp/FlaskApp/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
到:
<VirtualHost *:80>
ServerName [serverip]
ServerAdmin admin@[mydomain].com
WSGIScriptAlias / /var/www/FlaskApp/FlaskApp.wsgi
<Directory /var/www/FlaskApp/FlaskApp/>
Order allow,deny
Allow from all
</Directory>
<Directory /home/[user]/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/FlaskApp/FlaskApp/static
<Directory /var/www/FlaskApp/FlaskApp/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
我做了哪些研究: 对于上面提到的错误,我从这里 (Stack Overflow) 的搜索中获得了大部分尝试(如上所述)的想法。
约定: 我已将括号内的通用词(例如“[stuff]”)替换为我的生产应用配置文件等中的实际条目,只是为了不在像这样的公共论坛中透露太多信息。
我正在使用 Python 3.6.9,一个新安装的 mod-wsgi 和 apache2(假设是最新版本),运行在完全更新的 Ubuntu Server 18.04 之上,所有这些都在 AWS 的 Lightsaber 实例上。
我想要的: 一般来说,elp 会修复问题,以便我的 FlaskApp 可以将文件写入某处。具体来说,我认为了解烧瓶应用程序在哪些“用户”凭据下运行会很有帮助。如果我知道这一点,我也许能够弄清楚如何为某个地方配置权限来写入文件。令我困惑的是为什么文件没有被写入 /tmp,这让我认为这个问题可能比“权限”错误更复杂。
谢谢!
【问题讨论】:
标签: apache flask python-3.6 mod-wsgi permission-denied