Apache2 Нет прав на запись файла [Errno 13] Отказано в разрешении Flask Python - PullRequest
0 голосов
/ 21 апреля 2020

Сначала несколько деталей

Итак, я сделал небольшое веб-приложение с Flask. Теоретически он должен получать IP каждый раз, когда кто-то запрашивает или посещает веб-сайт. У меня все сделано (на Windows мой код работает отлично), но я установил Flask и перенес свой проект на сервер Linux, где у меня установлен Apache2. Я настроил Apache, чтобы он обрабатывал запросы к веб-приложению Flask. Все хорошо, как и мои шаблоны загружаются просто отлично, но часть с протоколированием IP не работает. Я думаю, что получить IP не проблема, хотя хранить его, скажем, файл json Каждый раз, когда я пытаюсь запустить, я получаю ошибку 500 на своем веб-сайте.

Apache Error Log : [Errno 13] Permission denied  '/opt/iplogs/iplog.json'

Код Python

def writeToJSONFile(path, fileName, data):
filePathNameWExt = path + fileName + '.json'
with open(filePathNameWExt, 'a') as fp:
    json.dump(data, fp, indent=2)
    fp.close()

@app.route("/")
def getIP():
    visit = {}
    ip_visit = request.remote_addr
    now = datetime.now()
    request_time = now.strftime("%d/%m/%Y %H:%M:%S")

    visit["IP"] = str(ip_visit)
    visit["date"] = str(request_time)


    writeToJSONFile("/opt/iplogs/", "iplog", visit) # WHEN i comment this function out there is no 500 error
    return render_template("home.html")

Основная проблема

Так что в Windows в среде разработки он работает нормально, но также и в linux, когда я просто позволяю Flask работать без apache обработки его запросов, только когда я запускаю сайт через Apache Я получаю сообщение об ошибке «Отказано в доступе». Поэтому он должен что-то делать с apache и его правами на запись?

Обратите внимание, что папка, в которой находится мой flask (python код), полностью отличается от того, где регистрируются ips + я использую Ubuntu и я ничего не менял в отношении разрешений для файлов или около того, черт возьми, я даже пробегаю root (я знаю, что я не должен этого делать, но это только для тестирования очень небольшой проект)

Это все, что я могу дать вам, ребята

Спасибо за все ответы

1 Ответ

0 голосов
/ 21 апреля 2020

Попробуйте это:

sudo chown -R www-data:www-data /opt/iplogs/

Пользователь Apache2 www-data не имеет разрешения для манипулирования этим файлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...