2016-08-17 34 views
1

我在EC2 Ubuntu实例上运行Flask Web服务器。目的是捕获传入POST的主体,将其写入本地文件,然后将该文件上传到S3。用于文件写入的容器权限

的代码,基本上是:

@app.route('/', methods=['GET','POST']) 
@app.route('/index.html', methods=['GET','POST']) 
def index_home(): 
    data = request.data 
    with open('test.json', 'w') as f: 
     f.write(data) 
## Upload the stuff to S3 

当我在本地网络服务器烧瓶实例中运行它,并发送POST从邮递员JSON体,它完美的作品。但在EC2实例上,我在'test.json'文件中得到了一个权限错误(根据apache error.log),导致页面加载时出现500错误。

我已经搜索谷歌和Stackoverflow(Here is a similar question,没有解决方案)无济于事。这看起来像一个简单的问题,但我已经尝试了一切,似乎无法实现它:我已将用户添加到www数据组,我已更改/ var/www文件夹和文件权限到root,ubuntu(默认的EC2 Ubuntu用户)和www-data我能想到的每一个组合,我都直接777目录...似乎没有任何工作。

显然,我有点新手。有没有配置文件或需要调整才能使其工作?

+0

什么是文件'test.json'的绝对路径? –

+0

/var/www/FlaskApps/app/test.json。但是,我在那里创建了该文件,假设Flask将读取/写入该目录。我可能是错的。 –

回答

4

你应该确保程序实际上是试图写入你想要写入的目录。它可能会尝试写入Python二进制文件的目录(或其他任何内容),这取决于您的命令和当前工作目录。 出于测试目的,你可以尝试改变,像这样的路径(确保/ tmp目录是可写的对于用户来说,这应该是这样):

with open('/tmp/test.json', 'w') as f: 
    f.write(data) 
+0

你明白了:绝对路径。这真是愚蠢,浪费了很多时间。它在当地工作的事实让我失望。我很欣赏这个快速回复。 –

+0

没问题,很乐意帮忙;) – matt3o

+0

这花了我太多时间来解决。谢谢! –