heroku 的后台工作

Background jobs on heroku

提问人:user979326 提问时间:11/16/2023 更新时间:11/16/2023 访问量:24

问:

我是 Heroku 的新手,我正在学习 Rails 应用程序的教程。

现在它所做的只是使用 sidekiq 处理一些后台作业。唯一的前端组件是 Sidekiq 仪表板。

它说在 Procfile 中启动 Web 服务器。但是,由于我需要做的就是安排一个工作线程以一定的时间间隔运行我的后台作业,这是否意味着除非我想查看排队仪表板,否则我无法启动 Web 服务器?只要我在耙子任务中还有其他东西,我就应该能够关闭 Web 服务器,对吧?

另外,我注意到当您将代码推送到 Heroku 时,它不会自动迁移数据库。如果我想确保数据库每次都是最新的,我也会把它放在 Procfile 中吗?

Ruby-on-Rails Ruby Heroku-Postgres

评论


答:

1赞 hardik 11/16/2023 #1

你只运行 Sidekiq 而不运行 Web 服务器是正确的,你可以像这样制作 procfile:

worker: bundle exec sidekiq -C config/sidekiq.yml

此 Procfile 命令将启动 Sidekiq 进程,但不会启动 Web 服务器。如您所述,此设置足以处理后台作业。

而对于每次部署后 Heroku 上的数据库迁移,您确实可以使用 Procfile 中的发布阶段脚本自动执行此过程

release: bundle exec rake db:migrate

通过在 Procfile 中包含 release 命令,Heroku 将在每次部署后自动运行 rake db:mémirate,确保数据库模式是最新的。

所以这是你最终的 Procfile 看起来像这样

release: bundle exec rake db:migrate
worker: bundle exec sidekiq -C config/sidekiq.yml