0

我是 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?

4

1 回答 1

3

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

不。

铁轨指南

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

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

ActiveJob 图

如何启动 ActiveJob?

所以 ActiveJob 不会自己运行后台作业。您仍然缺少其中一个后端。假设您决定使用delayed_job:安装它,然后通过以下方式启动它:

script/delayed_job start

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

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

用户.rb

def send_registration_email
  UserRegistraionMailJob.perform_later self
end
于 2015-03-20T16:46:37.067 回答