вторник, 16 августа 2011 г.

Re: Предотвращение параллельного выполнения кода.

Может создавать DelayedJob задание на эту тему? Тогда
1 - проверять, есть ли сейчас активное задание.
2 - не создавать второго задания если в очереди уже есть задание на
текущую дату.
Можно и чуть по умнее сделать (типа с рельсовой проверкой на
уникальность имени задания), но зачем.

С уважением,
Павел Васёв

16 августа 2011 г. 14:48 пользователь Виталий Куреннов
<vkurennov@gmail.com> написал:
> Привет.
> Есть рельсовое приложение (3.1), которое взаимодействует со внешней системой
> - качает xml, парсит и сохраняет в своей базе. Делается это с определенной
> периодичностью, скажем раз в сутки. Внешняя система требует авторизации,
> причем у рельсового приложения нет своего логина/пароля для доступа к
> внешней системе, можно использовать только логин/пароль вошедшего в систему
> пользователя.
> Таким образом, получается следующее:
> 1. Пользователь логинится в рельсовое приложение
> 2. Приложение, используя логин/пароль этого пользователя, стучится во
> внешнюю систему и берет, то что надо (естественно, если настало время для
> этого)
> Во время того как приложение взаимодействует с внешней системой, мы должны
> заблокировать это приложение для всех пользователей, т.е. написать что-то
> типа "Идет обновление, зайдите позже".
> Собственно тут 2 вопрос:
> 1. Как заблокировать приложение? Хотя тут вроде очевидно - поставить флаг
> какой-нибудь и проверять нет ли в данный момент обновления, но вдруг есть
> более лучшие решения?
> 2. Сильно беспокоит вопрос о том, что будет если 2 или более пользователя
> залогинятся одновременно и таким образом запустится 2 или более процессов
> обновленя параллельно. Как избежать этого со 100% вероятностью?
> Спасибо.
>
> --
> С уважением,
>  Виталий Куреннов (mailto:vkurennov@gmail.com)
>
> --
> --
> Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы
> "RubyOnRails to russian" на группах Google.
> FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
>
> Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
> ror2ru@googlegroups.com
> Чтобы отменить подписку на эту группу, отправьте сообщение по адресу:
> ror2ru-unsubscribe@googlegroups.com
> Дополнительные варианты находятся на странице группы
> http://groups.google.com/group/ror2ru?hl=ru

--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ

Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror2ru@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-unsubscribe@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru

Комментариев нет:

Отправить комментарий