为什么我的Rails工作者不执行?

时间:2017-05-23 20:45:46

标签: ruby-on-rails redis ruby-on-rails-5 sidekiq worker

我在Mac OS X上使用Rails 5.0.1。我刚通过自制软件安装了redis,并在我的Gemfile中使用了这个

gem 'sidekiq'

我有这个文件app / workers / run_crawlers_worker.rb,...

class MyWorker

  include Sidekiq::Worker

  def perform()
    puts "about to fire up service ..."
    svc = MyService.new
    svc.do_tasks
    puts "done invoking call"
  end

end

在我的网络应用程序的某个地方,我有

    MyWorker.perform_async()

虽然我有信心上面的内容被调用,但我没有看到我的工作中的任何“执行”方法被调用(我没有看到任何hte输出输出而且我看不到结果在我的数据库中执行的“do_tasks”方法)。我需要配置一些additioanl来调用我的方法吗?

2 个答案:

答案 0 :(得分:1)

您可能没有运行sidekiq,我建议您查看Foreman,它可以配置为一次运行所有预期的进程(Rails服务器,工作人员,Redis等)。< / p>

答案 1 :(得分:0)

  

我是否需要配置additioanl以调用我的方法?

你需要在后台运行sidekiq进程,它将负责运行你入队的作业。

  

有没有办法获得&#34;捆绑exec sidekiq&#34;在我启动Rails服务器时自动运行?

投入工头。这很容易。我假设基本配置,这就是你需要做的全部

  1. 安装Trace.PortFilter.ON gem。 (放入捆绑并进行捆绑安装)
  2. 您必须在rails root中创建名为foreman的文件。
  3. 假设基本配置,这是Procfile假设包含的内容

    Procfile
  4. 然后自发地执行这两个命令,只需执行web: bundle exec rails server worker: bundle exec sidekiq