2016-03-19 4 views
1

Из-за ограничений сторонней библиотеки мне нужно использовать файл со статическим именем. Что происходит в Rails, если несколько пользователей пытаются записать в этот файл одновременно? Ошибка EACCESS?Что происходит, когда несколько процессов пытаются записать один и тот же файл?

Есть ли способ, которым я мог бы обойти это?

ответ

1

На уровне Ruby, что произойдет, если несколько процессов попытаются записать файл, зависит от того, как библиотека использует файл: как и как он блокирует файл перед его открытием и в каком режиме он открывает файл. может просто сработать, это может привести к ошибке, или (скорее всего, если библиотека ничего не делает для обработки этой ситуации), многие авторы могут молча чередовать записи друг с другом таким образом, что это может повредить файл, или последний писатель может победить.

На уровне Rails это зависит от того, как вы запускаете Rails. Если вы запускаете один, обычно сконфигурированный экземпляр Rails на заданном сервере, у вас не будет никаких проблем, поскольку по умолчанию Rails является однопоточным. Если вы запускаете несколько экземпляров Rails (предположительно контролируемых сервером приложений, например, Пассажиром или единорогом), у вас могут быть проблемы.

Предполагая, что библиотека не обрабатывает несколько писателей для вас, вы можете работать вокруг него несколькими способами:

  • запускать только один экземпляр вашего приложения Rails на каждом сервере (или Docker контейнер или в изолированной среде Окружающая среда).
  • Вставьте библиотеку и измените ее, чтобы включить идентификатор процесса в имя файла. Это то, что я сделал бы.
Смежные вопросы