Дайте разрешение приложению Python Flask, работающему на Apache2 ubuntu

Я запускаю приложение Flask на сервере Apache2 в Ubuntu. Приложение будет принимать данные из формы и сохранять их в текстовый файл. Файл существует только на тот момент, когда он загружен на S3. После этого он удаляется.:

            foodforthought = request.form['txtfield']
        with open("filetos3.txt", "w") as file:
            file.write(foodforthought)
        file.close()
        s3.Bucket("bucketname").upload_file(Filename = "filetos3.txt", Key = usr+"-"+str(datetime.now()))
        os.remove("filetos3.txt")

но у приложения нет разрешения на создание файла:

[Errno 13] Permission denied: 'filetos3.txt'

Я уже пытался дать разрешения на папку, в которой находится приложение:

 sudo chmod -R 777 /var/www/webApp/webApp

но это не работает


person KRASSUSS    schedule 07.01.2021    source источник
comment
Вы проверили право собственности? попробуйте запустить его от пользователя root.   -  person Hamza Saeed    schedule 14.01.2021


Ответы (1)


Я предполагаю, что приложение запускается из другого места. Какой результат вы получаете из этого:

import os
print(os.getcwd())

Именно для этого каталога вам нужно установить разрешения. А еще лучше использовать абсолютный путь. Поскольку файл является временным, используйте tempfile, как подробно описано здесь.

foodforthought = request.form['txtfield']

with tempfile.NamedTemporaryFile() as fd:
    fd.write(foodforthought)
    fd.flush()

    # Name of file is in the .name attribute.
    s3.Bucket("bucketname").upload_file(Filename = fd.name, Key = usr+"-"+str(datetime.now()))

    # The file is automatically deleted when closed, which is when the leaving the context manager.

Несколько заключительных замечаний: вам не нужно close файл, так как вы используете контекстный менеджер. Кроме того, избегайте рекурсивной установки 777. Самый безопасный способ - установить +wX, чтобы установить только execute бит для каталогов и write бит для всего. Или еще лучше, будьте еще более конкретными.

person obeq    schedule 10.01.2021