EPERM на appendFile на сетевом диске
Приложение должно хранить данные журнала на сетевом диске.
Когда диск размещен под Windows, все в порядке.
Когда диск размещен под Mac, чтение/запись в порядке, но append получает EPERM, поэтому журнал не работает вообще.
Код довольно тривиальный
fs.appendFileSync('xxx.txt', 'zzzzzzzz');
Как правильно добавить данные? Файл обычно слишком большой для загрузки в память.
Обновление: чтение-запись-удаление-создание - это нормально! Открывается только открытие с добавлением
Ответы
Ответ 1
Я бы пошел с Люком Гендриксом. EPERM возникает, когда у вас недостаточно прав для файла/папки. Протестируйте следующие
Код:
fs.chmod('xxx.txt', 777, function(err){
if(err){
console.log(err);
return;
}
fs.appendFileSync('xxx.txt', 'zzzzzzzz');
});
Ссылка
https://nodejs.org/api/fs.html#fs_fs_chmodsync_path_mode
https://nodejs.org/api/fs.html#fs_fs_appendfilesync_file_data_options
Надеюсь, что это поможет.
Ответ 2
Может быть, файл используется каким-то другим процессом? (Таким образом, доступ/операция запрещена)
Ответ 3
EPERM означает Error - PERMission: nodejs не разрешено записывать в файл журнала. Проверьте, имеет ли приложение доступ к файлу журнала и изменит его, чтобы приложение node могло записывать в файл журнала.
На mac вы можете сделать chmod 777 somefile.log
(обратите внимание, что это позволяет любому, у кого есть доступ к вашей файловой системе, записывать в файл журнала).
Возможно, сервер Windows создал файл журнала, и серверу Mac не разрешен доступ к нему (поскольку он не является владельцем, а разрешение на запись не является общедоступным).