Tag: redis

在Sidekiq中使用多个Redis服务器

我正在使用Sidekiq将后台作业处理到我们的一个Rails项目中。 我们希望使用位于不同位置的不同Redis服务器来将ReportDB与其他后台处理作业ReportDB 。 根据Sidekiq配置维基我们可以配置像 配置/初始化/ sidekiq.rb Sidekiq.configure_server do |config| config.redis = { :url => ‘redis://redis.example.com:7372/12’, :namespace => ‘mynamespace’ } end Sidekiq.configure_client do |config| config.redis = { :url => ‘redis://redis.example.com:7372/12’, :namespace => ‘mynamespace’ } end 但是如何初始化与多个redis服务器的连接?

在循环内调用redis’get’来显示论坛post查看数据

我正在重建一个论坛/董事会。 其中一个要求是为主题记录视图信息。 在当前系统中,每次加载页面时都会进行数据库调用,从而更新该post的查看计数。 我想避免这种情况,并且正在考虑使用类似于此post的技术实现redis来记录该信息 – jQuery Redis点击计数器来跟踪缓存Rails页面的视图 所以我会向一个记录视图的控制器发出请求 – 通过javascript – 然后一个cron作业会将redis使用数据移动到数据库(从redis中删除它)。 我的窘境是,当前的系统提供实时使用信息,这将是未来的期望。 使用Heroku – 按照我的计划 – 最常见的cron工作将按小时运行,我认为这是不可接受的。 我的想法是我可以将使用信息存储在redis中然后当我循环访问主题时,我会将存储在redis中的使用值与从cron作业保存在数据库中的值结合起来。 这是一个愚蠢的想法吗? 我是redis的新手,所以我真的不知道什么是可能的。 像我建议的那样在循环中进行redis调用是否是一个巨大的禁忌?

访问rails线程中的变量

我正在构建一个基于网络的幻灯片放映的应用程序,其中一个“主”用户可以在幻灯片之间移动,每个人的浏览器都会跟随。 为此,我使用websockets和Redis作为全局通道来发送消息。 每个连接的客户端都有一个存储在数组中的信息@clients 。 然后我有一个单独的线程用于订阅Redis通道,其中定义了一个’on.message’块,它应该向@clients数组中的每个人发送一条消息,但该块在该块内是空的(在任何地方都不是空的)否则在模块中)。 几乎遵循这个例子: https : //devcenter.heroku.com/articles/ruby-websockets 相关代码,位于自定义中间件类中: require ‘faye/websocket’ require ‘redis’ class WsCommunication KEEPALIVE_TIME = 15 #seconds CHANNEL = ‘vip-deck’ def initialize(app) @app = app @clients = [] uri = URI.parse(ENV[‘REDISCLOUD_URL’]) Thread.new do redis_sub = Redis.new(host: uri.host, port: uri.port, password: uri.password) redis_sub.subscribe(CHANNEL) do |on| on.message do |channel, msg| puts @clients.count ### prints […]

Rails,Sidekiq – Redis NOAUTH

我在rails上使用sidekiq发送电子邮件。 我已经为redis服务器添加了密码,但似乎无法正确使用,因为我收到了错误 D, [2015-12-10T16:49:52.714279 #10497] DEBUG — : (0.5ms) COMMIT I, [2015-12-10T16:49:52.720380 #10497] INFO — : [ActiveJob] Enqueued ActionMailer::DeliveryJob (Job ID: 5bce215c-7649-4774-8c6e-d29e743cf25e) to Sidekiq(mailers) with arguments: “MessageMailer”, “new_message”, “deliver_now”, gid://customer-app/Message/18 I, [2015-12-10T16:49:52.723400 #10497] INFO — : Completed 500 Internal Server Error in 25ms (ActiveRecord: 1.6ms) F, [2015-12-10T16:49:52.726204 #10497] FATAL — : Redis::CommandError (NOAUTH Authentication required.): […]

如果Redis关闭,则禁用Rails缓存

我正在使用Rails 4.1并设置共享Redis ElasticCache节点进行缓存。 我尝试了https://github.com/redis-store/redis-store和https://github.com/sorentwo/readthis ,看起来很棒。 但是如果Redis失败会怎么样? readthis和redis-store都完全失败了。 我宁愿让网站缓慢无缓存而不是死机。 有没有人有想法? 我提前谢谢你。

使用devise-async发送电子邮件不起作用(Rails / Sidekiq)

我在我的Rails应用程序中有sidekiq (2.15.2) , sidekiq (2.15.2) devise (3.2.0)和sidekiq (2.15.2) devise-async (0.9.0) 。 我试图让devise-async接管发送电子邮件。 但没有运气。 我按照这样的说明 : 添加:async到User模型: # models/user.rb class User include Mongoid::Document devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable, :async end 创建初始化程序: # config/initializers/devise_async.rb Devise::Async.backend = :sidekiq 我没有在邮件中进行任何自定义修改 # config/initializers/devise_async.rb Devise.setup do |config| config.mailer_sender = “my@email.com” # config.mailer = “Devise::Mailer” end 以下是创建新帐户时在控制台中显示的内容: Started POST […]

在Sidekiq的民主队列

用户可以创建包含多个任务的Project对象。 当用户告诉项目execute所有这些任务都放在Sidekiq的默认队列中。 问题是:如果用户创建一个包含1000个任务的项目并点击execute按钮,那么所有这1000个任务都将被放入队列中。 如果在此之后,另一个用户创建只有一个任务的项目,当他点击执行该项目时,其唯一的任务就是放在行的末尾。 我希望这种背景过程能够以更民主的方式进行。 如果每个项目都有自己的队列,则很可能第一个项目中的一个任务在1000个任务队列结束之前执行。 为此,我将需要每个项目的separe队列,它应该动态创建。 我正在尝试使用以下代替perform_async来实现这一点: Sidekiq::Client.push(‘queue’ => “project_#{self.project.id}”, ‘class’ => TaskWorker, ‘args’ => [self.id]) 但是,当我尝试execute项目时,所有任务都放在一个名为“project_somenumber”的队列中,但它们都没有被执行。 看来当我使用Sidekiq::Client.push ,我需要告诉队列开始执行。 这是对的吗? 我怎么能开始那个队列?

ActionCable:每个用户一个频道

我正在处理我的rails应用程序的通知。 有User模型和控制器以及与用户关联的Like模型与用户有很多喜欢关联。 这个想法是,如果用户喜欢另一个用户的个人资料,该个人资料的所有者将获得实时通知。 这是我理解ActionCable的应用程序。 我研究过有线电视api ,pub-sub对我很新。 我能够通过单一渠道进行成功的沟通,并成功使用了授权 。 但是,我仍然不明白如何使用每个用户的单个频道(动态生成的频道),以便发布给一个用户的消息不会转发给另一个用户。 动态频道可能吗? 或者,是否有其他方式可以满足所有用户的需求

如何判断sidekiq是否连接到redis服务器?

使用控制台,如何判断sidekiq是否连接到redis服务器? 我希望能够做到这样的事情: if (sidekiq is connected to redis) # psuedo code MrWorker.perform_async(‘do_work’, user.id) else MrWorker.new.perform(‘do_work’, user.id) end

在sidekiq上配置redis auth

我想我错过了一些东西,因为我在文档中找不到如何编写redis实例的用户名和密码以与sidekiq一起使用.. 有没有办法做到这一点? 还是通过ENV vars?