【问题标题】:Setting different queue names in Resque mailer在 Resque 邮件程序中设置不同的队列名称
【发布时间】:2017-06-12 07:22:22
【问题描述】:

在我的 rails4 应用程序中,我需要每周向所有用户发送一次电子邮件。用户属于不同的部门。我需要根据部门明智的队列名称来组织邮件发送。但是,我不知道如何在发送邮件时将队列名称作为参数。所有邮件使用相同的队列名称“weekly_user_activity_queue”。未设置为如下定义的部门名称队列。我怎样才能做到这一点。代码如下:

gemfile

  gem 'resque',:require => "resque/server" # for background processing
  gem 'resque_mailer' #for background mail sending

app/mailers/user_activit_mailer.rb

  class UserActivityMailer  < ActionMailer::Base
  include Resque::Mailer

  @queue = :weekly_user_activity_queue

  def weekly_user_activities
    User.find_each do |user|
      @activities = user.get_user_activities
      email = @user.email

      @queue = user.get_department_name # Assigning department name as the queue name. Users with same department gets the email through the same queue.

      mail(to:email, subject: default_i18n_subject)
    end
  end
end

请帮忙。提前致谢。

【问题讨论】:

  • user.get_department_name 的值是多少?
  • “营销”、“销售”、“生产控制”等
  • 尝试@queue = user.get_department_name.downcase.gsub(' ','_').to_sym
  • 执行上述操作后,@queue.inspect 将生成正确的队列名称。但是,在发送电子邮件时,它会被默认队列名称“weekly_user_activity_queue”覆盖。

标签: ruby-on-rails email resque resque-scheduler


【解决方案1】:

现在,下面的代码将能够设置用户定义的队列名称:

WeeklyUserUpdates.enqueue(tenant,user.id)

workers/weekly_user_updates.rb

中定义了入队方法
def self.enqueue(user_id)
  Resque::Job.create(select_queue_name(user_id),self,user_id)
end

def self.select_queue_name(userid)   
  queue_name = User.find_by_id(userid).department_name
end    

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 2018-09-09
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    相关资源
    最近更新 更多