【问题标题】:Where do I enqueue jobs into ActiveJob in Rails 4.2?在 Rails 4.2 中,我在哪里将作业排入 ActiveJob?
【发布时间】:2015-03-20 15:19:11
【问题描述】:

我是 Rails 的初学者。我正在尝试遵循这个例子:

http://ryanselk.com/2014/09/25/using-background-jobs-in-rails-42-with-active-job/

上面写着:

"作业可以从任何地方添加到作业队列中。我们可以通过以下方式将作业添加到队列中:ResizeImage.perform_later 'http://example.com/ex.png'"

[更新]对不起,我很愚蠢。我想出了这个任务:

namespace :simple do

  # call from command line:
  # rake simple:resize_images 

  desc "Resize images"
  task resize_images: :environment do

    Dir.foreach('storage') do |next_image|
      puts next_image
      next if next_image == '.' or next_image == '..'
      ResizeImage.perform_later next_image
    end

  end

end

但现在我愿意:

rake simple:resize_images 

我得到:

zacek2_phpP9JGif.jpg
rake aborted!
NameError: uninitialized constant ResizeImage

我试过了:

require ResizeImage

但这并没有解决问题。

恐怕我不明白在 Rails 中加载是如何工作的。如何加载 ResizeImage?

【问题讨论】:

    标签: ruby-on-rails rails-activejob


    【解决方案1】:

    我是否将其设置为 cron 作业?

    没有。

    来自the rails guides

    Active Job 是一个用于声明作业并使它们在各种排队后端运行的框架。

    Active Job 是队列后端的接口,例如 sidekiqdelayed_jobresque。这只是您编写后台作业的一种方式,您不必关心将使用哪个排队后端。

    如何启动 ActiveJob?

    因此 ActiveJob 不会自行运行后台作业。您仍然缺少其中一个后端。假设您决定使用延迟作业:Get it installed,然后通过以下方式启动它:

    script/delayed_job start
    

    我不明白“任何地方”在哪里。

    这意味着在您的代码中的任何地方,您都可以编写如下内容:

    user.rb

    def send_registration_email
      UserRegistraionMailJob.perform_later self
    end
    

    【讨论】:

    • 很棒的答案。一个跟进:我决定从 rake 任务中调用它。但我无法找到正确的工作路径。如何获取 NameError:未初始化的常量 ResizeImage。如何将 ResizeImage 作业导入 rake 任务?
    • 我有:“app/jobs/resize_image_job.rb”中的“class ResizeImage
    • 我安装了 sidekiq gem
    • 啊,我很愚蠢。我给文件起错误的名字。现已修复。
    猜你喜欢
    • 2015-04-27
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 2015-08-20
    • 2014-11-06
    • 2023-03-22
    相关资源
    最近更新 更多