Мы наблюдаем за изменениями файлов с помощью chokidar с nodejs на сервере Ubuntu. Он работает очень хорошо, но иногда я думаю, что у нас есть проблема с тем, как файл сохраняется при изменении: в chokidar запускается событие «onchange», но когда мы читаем файл в обратном вызове, он пуст или (редко) не написано полностью. Мы не знаем, является ли это проблемой, вызванной текстовым редактором, записывающим файл, операционную систему на клиентском компьютере, ОС или файловую систему (ext4) на сервере или если это какая-то ошибка в chokidar.chokidar: onchange событие для файла, возможно, вызвано быстрым
Эта проблема с пустым файлом теперь происходит почти каждый раз с помощью изменений файла, сделанных с одного компьютера (mac, последняя версия osx), где используется возвышенность 3. В возвышенных мы попытались установка «atomic_save» (создает временные файлы, а затем перезаписывает исходный файл), но это не решает нашу проблемы:
- С atomic_save набора для «ложного» файл, как представляется, всегда пусто в событии onchange и
- С atomic_save «true» иногда пуст, а иногда и частично написан.
Мы имели эту проблему, прежде чем с PhpStorm, но после перехода на «использовать„безопасной записи“(сохранить изменения в временный файл)» - так же настройки, как atomic_save в возвышенном, что также объясняет, почему мы попробовал atom_save в sublime -, событие onchange было вызвано правильно после того, как все было написано.
Так что наш вопрос: есть ли способ, чтобы «onchange» срабатывал, когда файл полностью написан каким-то образом (в chokidar, в ОС, в возвышенном)? Или нам нужно проверить размер файла в событии «onchange», пока он не изменился какое-то время (не так приятно)? Или наша проблема может возникнуть из-за чего-то еще?
Мы будем признательны за любые подсказки! Заранее спасибо!
Спасибо! Я не видел эту настройку. Ну, у меня установлен последний chokidar, но почему-то этот параметр не имеет значения. Даже с объектом awaitWriteFinish и значением стабильностиThreshold, установленным в 10000, пусть событие onchange запускается мгновенно (а не через 10 секунд). Но я просто попробовал другую настройку самостоятельно, «usePolling: true», и она работает тогда. Ну, это, похоже, не очень перформативно, но, по крайней мере, это работает. – Ryo
@Ryo Я рад, что вы заработали. Если этот ответ [обратился к вашей проблеме] (http://stackoverflow.com/help/someone-answers), пожалуйста, рассмотрите [принять его] (http://meta.stackexchange.com/questions/5234/how-does-accepting -an-answer-work), нажав на галочку/галочку слева от ответа, повернув ее зеленым. Это означает, что вопрос был удовлетворен вашим удовлетворением, а также награды [репутации] (http://stackoverflow.com/help/whats-reputation) как вам, так и тому, кто ответил. – MattDMo