我很困惑heroku和sidekiq如何工作。我的Procfile看起来像:
web: bundle exec puma -C config/puma.rb
worker: bundle exec sidekiq -e $RAILS_ENV
现在在我的轨道中,我在我的代码中运行我的sidekiq作业,如:
SomeWorker.perform_async(some.id)
现在这会自动以某种方式使这个过程在worker dyno中运行吗?
如果是的话,它如何知道如何运行此过程?
令人困惑,因为当我在我的主git文件夹中时,我可以运行heroku命令,我知道这是针对我的web dyno,但是我如何看到我的工作人员dyno的日志或者这些是否在我的同一个dyno中日志?
答案 0 :(得分:2)
当您设置Procfile
时,您告诉Heroku设置两种类型的dynos:web
和worker
。这些可能是使用相同的Rails应用程序代码,但是使用不同的命令启动(bundle exec puma
与bundle exec sidekiq
)。然后,您可以扩展每种类型的进程所需的许多VM(dynos)。
将两者结合在一起的胶水是Redis。当您从SomeWorker.perform_async(some.id)
进程运行web
时,您将向Redis添加一条描述要运行的作业的记录。您的worker
进程会监视Redis以获取新记录,然后对其进行处理。
Heroku日志显示所有正在运行的dynos的日志。因此,您应该看到来自web
和worker
进程的日志混合在一起。