所以我现在被这个问题困扰了一天。我对AWS EC2比较陌生,所以一直在尝试使用Python Flask应用程序。
我有一个Ubuntu实例,并且可以使用Apache2和WSGI获得一个烧瓶应用程序以运行正常。唯一的问题是每当我在我的应用程序中放入一行请求在文件系统上读取或写入服务器错误时,但错误日志不会产生错误。
这里的函数有一些调试打印错误的网站:
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
出现的唯一行是调试打印&#39; 1&#39;。
奇怪的是,如果我在本地运行该服务器,它可以正常工作。即使我通过python shell在EC2实例上手动运行该函数,它仍然可以正常工作。所以我认为它可能与Apache或WSGI权限有关?
我已将整个烧瓶网站更改为chmod -R 777
,并将用户:group从root:root更改为ubuntu:ubuntu,但其中没有一个似乎有所作为?
我现在有点空白,说实话所以不确定我还能尝试什么呢?
为了更好地衡量我的/etc/apache2/sites-available/ImgResizeApi.conf
文件:
<VirtualHost *:80>
WSGIDaemonProcess ImgResizeApi
WSGIScriptAlias / /var/www/ImgResizeApi/ImgResizeApi.wsgi
<Directory /var/www/ImgResizeApi>
WSGIProcessGroup ImgResizeApi
WSGIApplicationGroup %{GLOBAL}
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
编辑:我很确定它现在与权限有关,因为我做了一个更简单的测试,添加了下面的功能,只要添加了3个文件IO行,就会出现错误服务器!
@ImgResizeApi.route('/test')
def test():
f = open('test.txt', 'w')
f.write('Hi there')
f.close()
return render_template('index.html')
答案 0 :(得分:1)
关于吃我眼睛的事情是'__ file __'在引号中。 它是一个特殊变量,而不是字符串。它不应该被引用。
您可能希望首先打印basePath变量以查看您获得的实际路径。
此外,为了跨平台兼容性,您可能希望使用os.path.sep而不是'/'以及路径连接使用os.path.join而不是简单的字符串concat。
答案 1 :(得分:0)
可能与此question相关,编辑部分的解决方案是将相对路径转换为绝对路径。我不知道如何在EC2上启动程序,但似乎工作目录位于某些Python /库目录中,其中不允许实际程序写入。 修复可能如下所示:
@ImgResizeApi.route('/test')
def test():
f = open('/tmp/test.txt', 'w')
f.write('Hi there')
f.close()
return render_template('index.html')