У меня есть способ регистрировать действия в файле json:
def log(self, action, data):
import json
import os
current_directory = os.path.dirname(os.path.realpath(__file__))
try:
with open(current_directory+'/logs/log_'+str(data['id'])+'.json', 'a+') as outfile:
log_data = {
str(datetime.today()): {
'action': action,
'data': data
}
}
json.dump(log_data, outfile, indent=2)
except Exception as e:
print('\033[91m'+"Couldn't access log file to log changes in Reservation model: [{}]".format(str(e))+'\033[0m')
print('Current directory is {}'.format(os.path.dirname(os.path.realpath(__file__))))
Он работает локально на моем Mac, но всегда возвращает permission denied на сервере Linux. Разрешения каталога журналы установлены на 755 с chmod, но я все равно получаю ту же ошибку:
[Wed Nov 28 16:27:23.551207 2018] [wsgi:error] [pid 18955:tid 139905951835904] [remote 189.149.229.31:63243] \x1b[91mCouldn't access log file to log changes in Reservation model: [[Errno 13] Permission denied: '/home/axel/IntellibookProject/Intellibook/ReservationsManagerApp/logs/log_43.json']\x1b[0m
[Wed Nov 28 16:27:23.551346 2018] [wsgi:error] [pid 18955:tid 139905951835904] [remote 189.149.229.31:63243] Current directory is /home/axel/IntellibookProject/Intellibook/ReservationsManagerApp
Да, это так. Когда этого не происходит, я получаю другой код ошибки
как насчет разрешений на каталог журналов? вы можете создать внутри него файл вручную?
@ Жан-Франсуа Фабр Да, я могу,
почему режим "а +"? попробуйте просто "а". И проверьте, не существует ли файл еще до записи в него. Возможно файл нельзя перезаписать






Кто бы ни был пользователем, запускающим скрипт python, похоже, не хватает разрешений на доступ к каталогу - посмотрите, решит ли вашу проблему использование chown для установки владельца каталога.
Например: 'sudo chown -R someuser / path / to / the / directory'.
Параметр "-R" означает, что владельцем установлен каталог и все содержимое в нем.
В системах, подобных CentOS и RHEL, вам может потребоваться установить контекст SE Linux, чтобы разрешить запись в определенный каталог. Чтобы временно отключить SE Linux и проверить, не является ли это проблемой SE Linux, введите sudo setenforce 0 (применимо только к системам с SE Linux, таким как RHEL, CentOS, Fedora, Oracle Linux, SUSE, OpenSUSE и другие).
каталог
logsсуществует? если не создать.