我在哪里将作业排入Rails 4.2中的ActiveJob?

时间:2015-03-20 15:19:11

标签: ruby-on-rails rails-activejob

对于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?

1 个答案:

答案 0 :(得分:3)

  

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

没有

来自the rails guides

  

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

Active Job是排队后端的界面,例如sidekiqdelayed_jobresque。这只是一种编写后台作业的方法,您无需关心将使用哪个排队后端。

ActiveJob Diagram

  

如何启动ActiveJob?

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

script/delayed_job start
  

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

这意味着代码中的任何地方都可以写出类似的内容:

user.rb

def send_registration_email
  UserRegistraionMailJob.perform_later self
end