У меня есть проблемы с Redis pub/sub в RoR в режиме производства.
У меня есть 3 экземпляра: сервер RoR, узел сервер и задача Rake и модель в некотором состоянии (модель состоянии 1)RoR + Node.js Redis sub/pub на производстве
RoR сервер обновляет модель с идентификатором = 1 и опубликовать событие «один» в Redis. (Модель состояние 2)
Node.js сервер подписался на Redis события «один» получает сообщение, делать что-то и опубликовать событие «два» в Redis с некоторыми данными
- Rake задача в Rails ENV подписавшихся на Redis событие 'два' получает сообщение и обновление модели с данными сообщения (состояние Model 3)
Некоторое время спустя:
- Node.js сервер публиковать событие 'три' в Redis с Типовым идентификатором.
- же грабли задача подписалась на событие «три» получает сообщение и найти модель, полученного идентификатор (Model.find_by (ID: сообщение [: идентификатор])) и получает модель состояния 1, но не состояние модели 3.
Это наблюдается только в случае режима производства. В режиме разработки команда rake получает состояние модели 3, и все в порядке.
development.rb
Rails.application.configure do
config.cache_classes = false
config.eager_load = false
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
config.action_mailer.raise_delivery_errors = false
config.active_support.deprecation = :log
config.active_record.migration_error = :page_load
config.assets.debug = true
config.assets.digest = true
config.assets.raise_runtime_errors = true
end
production.rb
Rails.application.configure do
config.cache_classes = true
config.eager_load = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.serve_static_files = true
config.assets.js_compressor = :uglifier
config.assets.compile = true
config.assets.digest = true
config.log_level = :debug
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.log_formatter = ::Logger::Formatter.new
config.active_record.dump_schema_after_migration = false
end