AWS EC2上的Flask Apache读/写失败

2024-06-26 10:53:01 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我被这个问题困扰了一天。我对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文件:

^{pr2}$

编辑:我很确定这与权限有关,因为我做了一个更简单的测试,添加了下面的函数,一旦添加了3个文件IO行,服务器就会出错!在

@ImgResizeApi.route('/test')
def test():
        f = open('test.txt', 'w')
        f.write('Hi there')
        f.close()
        return render_template('index.html')

Tags: path实例函数test服务器log应用程序wsgi
2条回答

可能与question有关,编辑部分的解决方案是将相对路径转换为绝对路径。我不知道EC2上的程序是如何启动的,但是工作目录似乎位于Python/library目录中,而实际的程序是不允许写的。 修复可能是这样的:

@ImgResizeApi.route('/test')
def test():
        f = open('/tmp/test.txt', 'w')
        f.write('Hi there')
        f.close()
        return render_template('index.html')

让我眼花缭乱的一件事是,''uufile'uuu'是用引号括起来的。 它是一个特殊的变量,不是字符串。它不应该被引用。在

您可能需要先打印basePath变量,以查看返回的实际路径。在

此外,为了实现跨平台兼容性,您可能需要使用操作系统路径.sep而不是“/”以及用于路径连接的os.path.join操作系统而不是简单的字符串concat。在

相关问题 更多 >