2016-08-17 38 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

這花了我太多時間來解決。謝謝! –