RoR + Node.js Redis sub/pub 生产环境

Posted

技术标签:

【中文标题】RoR + Node.js Redis sub/pub 生产环境【英文标题】:RoR + Node.js Redis sub/pub on production 【发布时间】:2015-10-29 06:15:10 【问题描述】:

我在生产模式下使用 RoR 中的 Redis pub/sub 时遇到了一些问题。 我有 3 个实例:RoR 服务器、节点服务器和 Rake 任务以及处于某种状态的模型(模型状态 1)

    RoR 服务器更新 id = 1 的模型并将事件“一”发布到 Redis。 (模型状态 2)

    订阅 Redis 事件“一”的 Node.js 服务器获取消息,执行操作并将事件“二”与一些数据一起发布到 Redis

    Rails 环境中订阅 Redis 事件“二”的 Rake 任务获取消息并使用消息数据更新模型(模型状态 3)

一段时间后:

    Node.js 服务器使用模型 ID 将事件“三”发布到 Redis。 订阅事件“three”的同一 rake 任务获取消息并通过接收到的 id (Model.find_by(id: message[: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

【问题讨论】:

【参考方案1】:

解决了在生产模式下启动 rake 任务的问题

bundle exec rake some:task RAILS_ENV=production

【讨论】:

以上是关于RoR + Node.js Redis sub/pub 生产环境的主要内容,如果未能解决你的问题,请参考以下文章

Node.js/ 使 redis 调用异步

Node.js - Redis 教程 [关闭]

Node.js:关闭所有 Redis 客户端

Node.js + Express + Redis,何时关闭连接?

node.js中如何配置redis与连接池?

Node.js 和 Redis;等待循环完成