【问题标题】:resque rails 4.2 deliver_later Mailersresque rails 4.2 deliver_later
【发布时间】:2016-02-15 15:27:04
【问题描述】:

我有一个 Ruby on Rails 应用程序,我需要在面试前一天发送申请人提醒邮件。为此,我计划使用 The Rescue Scheduler,我使用的是 rails v 4.2。我已经运行了redis服务器我的代码如下:

    def sendemails
        @user2=User.new( :firstname=> "Betterlucknexttime",:email=>)
        SendEmailJob.new.perform(@user)
    end

在 sendEmail 文件中

    class SendEmailJob < ActiveJob::Base
        queue_as :default
        def perform(user)
            UserMailer.welcome_email(user).deliver_later
        end
    end

在配置/开发中我设置了config.active_job.queue_adapter = :resque

我检查了我的日志文件,这是我看到的:

[ActiveJob] 无法记录“enqueue.active_job”事件。 URI::GID::MissingModelIdError: 无法为用户创建全局 ID 没有模型 ID。 app/jobs/send_email_job.rb:5:in perform'
app/controllers/adminusers_controller.rb:45:in sendemails'

一般来说,当我不使用 Deliver_later 选项时,我会立即收到我的电子邮件。但是,我需要使用 Deliver_later 来发送这些电子邮件作为提醒。非常感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby logging resque


    【解决方案1】:

    由于您正在执行 User.new,因此您不会将该用户保存到数据库中。当作业开始时,数据库中没有用户可以拉取。如果您改为使用 User.create,这应该可以按预期工作。

    这里是一篇文章的链接,描述了当前的工作以及如何使用它:http://www.sitepoint.com/new-rails-shiny-activejob/

    【讨论】:

    • 这里有一些更详细的原因说明它的工作原理。 Deliver_later 依赖全局 ID 来调度/排队作业(一种通过将数据保存在数据库中并稍后使用 ID 检索它来避免序列化整个对象的方法)。由于全局 ID 仅在保存时创建,因此当您在测试中查找它时它会丢失。 .create 方法在后台调用 .new 和 .save。
    猜你喜欢
    • 2015-03-09
    • 2015-03-03
    • 2015-03-04
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 2018-03-31
    相关资源
    最近更新 更多