2016-08-17 7 views
1

私はFlaskウェブサーバをEC2 Ubuntuインスタンス上で実行しています。目的は、着信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 

私は地元のフラスコWebサーバインスタンス上でそれを実行し、ポストマンからJSON本体とPOSTを送信すると、それが完璧に動作します。しかし、EC2インスタンスでは、「test.json」ファイルのパーミッションエラー(Apacheのerror.logによる)が発生し、ページロード時に500のエラーが発生します。

GoogleとStackoverflow(解決策なしでHere is a similar question)を無駄にしました。これは簡単な問題のようですが、私はすべてを試してみましたが、うまく動作していないようです。ユーザーをwww-dataグループに追加しました。/ var/wwwフォルダとファイルのアクセス権を変更しましたroot、ubuntu(デフォルトのEC2 Ubuntuユーザー)と私が考えることができるwwwデータのすべての組み合わせに、私はまっすぐ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

これは私を苦労させて解決しました。ありがとう! –

関連する問題