#ruby-on-rails #ruby #opalrb #hyperstack
#ruby-on-rails #ruby #opalrb #hyperstack
Вопрос:
В Hyperstack каждое изменение состояния попадает в очередь сообщений через механизм websocket для информирования каждого клиента приложения об изменениях состояния модели / приложения. Таким образом, если вы обновляете модель из сеансов моего браузера, все остальные, подключенные в данный момент, могут видеть ее в своем сеансе (при наличии необходимых разрешений).
Это даже делается из консольных «сеансов». Вы меняете модель с консоли Rails, и изменения автоматически распространяются на все подключенные веб-клиенты.
Для этого часть веб-приложения должна быть работоспособной (т. Е. сервер rails должен быть запущен).
Проблема в том, что есть две ситуации, когда вы можете не захотеть, чтобы обновления консоли распространялись на клиент:
-
когда сервер rails по какой-либо причине не работает, и вы хотите взаимодействовать с приложением через его консоль (пока сервер rails снова не заработает)
-
Вы хотите выполнять пакетные обновления с помощью задач консоли или rake и не хотите накладных расходов на информирование клиентов.
Есть ли способ быстро отключить обмен сообщениями с консоли или какой-либо метод переключения для этой цели?
Ответ №1:
Если сервер rails не запущен, он не будет пытаться отправлять сообщения (однако см. Примечание в конце)
Но интересен случай с задачей rake, которую вы хотите запустить, пока сервер включен. Я не думаю, что существует какой-либо опубликованный способ отключить нажатие «удаленный процесс -> сервер», но этот патч выполнит то же самое:
module Hyperstack
def self.send_to_server(*args)
# drop the message on the floor
end
end
Просто вставьте это в задачу rake.
Что касается сервера, который «не работает», единственный случай, который не работает, — это если сервер на самом деле «включен», но просто никогда не отвечает. Смотрите https://github.com/hyperstack-org/hyperstack/issues/144 подробнее. Если вы пытаетесь отладить проблему с сервером, то тот же патч, описанный выше, поможет, пока эта проблема не будет устранена.