所以我被这个问题困扰了一天。我对awsec2比较陌生,所以一直在用Python Flask应用程序在上面进行试验。在
我有一个Ubuntu实例,可以使用Apache2和WSGI让一个flask应用在上面运行。唯一的问题是,每当我在应用程序中放一行请求对文件系统进行读或写操作时,服务器就会出错,但错误日志不会产生错误。在
下面是一个函数,其中包含一些错误站点的调试打印:
def cleanup_temps():
basePath = os.path.dirname(os.path.realpath('__file__')) + '/static/images/temp/'
deleteDelay = 20
print '1'
for f in os.listdir(basePath):
print '2'
if os.path.getctime(basePath + f) < (time.time() - deleteDelay):
print '3'
os.remove(basePath + f)
当我加载调用该函数的页面时,它只会给我一个内部服务器错误,检查/var/log/apache2/error.log
唯一出现的行是调试打印“1”。
奇怪的是,如果我在本地运行服务器,它可以正常工作。即使我通过pythonshell在EC2实例上手动运行该函数,它仍然可以正常工作。所以我想这可能和Apache或WSGI权限有关?在
我把整个烧瓶的位置改为chmod -R 777
,并改变了用户:组来自根:根到ubuntu:ubuntu,但这一切似乎都没有改变?在
老实说,我现在有点茫然,所以不知道还能做什么?在
下面是我的/etc/apache2/sites-available/ImgResizeApi.conf
文件:
编辑:我很确定这与权限有关,因为我做了一个更简单的测试,添加了下面的函数,一旦添加了3个文件IO行,服务器就会出错!在
@ImgResizeApi.route('/test')
def test():
f = open('test.txt', 'w')
f.write('Hi there')
f.close()
return render_template('index.html')
可能与question有关,编辑部分的解决方案是将相对路径转换为绝对路径。我不知道EC2上的程序是如何启动的,但是工作目录似乎位于Python/library目录中,而实际的程序是不允许写的。 修复可能是这样的:
让我眼花缭乱的一件事是,''uufile'uuu'是用引号括起来的。 它是一个特殊的变量,不是字符串。它不应该被引用。在
您可能需要先打印basePath变量,以查看返回的实际路径。在
此外,为了实现跨平台兼容性,您可能需要使用操作系统路径.sep而不是“/”以及用于路径连接的os.path.join操作系统而不是简单的字符串concat。在
相关问题 更多 >
编程相关推荐