{"id":28566829,"url":"https://github.com/salsify/delayed_job_worker_pool","last_synced_at":"2026-03-10T05:32:35.383Z","repository":{"id":41819721,"uuid":"40631300","full_name":"salsify/delayed_job_worker_pool","owner":"salsify","description":"Worker process pooling for Delayed Job","archived":false,"fork":false,"pushed_at":"2024-01-05T16:13:03.000Z","size":59,"stargazers_count":36,"open_issues_count":3,"forks_count":12,"subscribers_count":62,"default_branch":"master","last_synced_at":"2026-02-18T23:38:22.558Z","etag":null,"topics":["gem","hacktoberfest"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/salsify.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-08-13T00:43:27.000Z","updated_at":"2025-11-06T13:14:50.000Z","dependencies_parsed_at":"2023-02-12T05:01:36.429Z","dependency_job_id":"4a8c2d69-7e0c-4671-946b-eb6888cac0f8","html_url":"https://github.com/salsify/delayed_job_worker_pool","commit_stats":{"total_commits":32,"total_committers":7,"mean_commits":4.571428571428571,"dds":0.375,"last_synced_commit":"56c45b58a1968e8d8d424499a207056717dc56bf"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/salsify/delayed_job_worker_pool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salsify%2Fdelayed_job_worker_pool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salsify%2Fdelayed_job_worker_pool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salsify%2Fdelayed_job_worker_pool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salsify%2Fdelayed_job_worker_pool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/salsify","download_url":"https://codeload.github.com/salsify/delayed_job_worker_pool/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salsify%2Fdelayed_job_worker_pool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29951046,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-28T18:42:55.706Z","status":"ssl_error","status_checked_at":"2026-02-28T18:42:48.811Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gem","hacktoberfest"],"created_at":"2025-06-10T15:39:14.957Z","updated_at":"2026-03-10T05:32:35.365Z","avatar_url":"https://github.com/salsify.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Delayed Job Worker Pool\n\n[![Gem Version](https://badge.fury.io/rb/delayed_job_worker_pool.png)][gem]\n[![Build Status](https://secure.travis-ci.org/salsify/delayed_job_worker_pool.png?branch=master)][travis]\n[![Code Climate](https://codeclimate.com/github/salsify/delayed_job_worker_pool.png)][codeclimate]\n\n[gem]: https://rubygems.org/gems/delayed_job_worker_pool\n[travis]: http://travis-ci.org/salsify/delayed_job_worker_pool\n[codeclimate]: https://codeclimate.com/github/salsify/delayed_job_worker_pool\n\n[Delayed Job's](https://github.com/collectiveidea/delayed_job) built-in worker pooling daemonizes all worker processes. This is great for certain environments but not so great for environments like Heroku that really want your processes to run in the foreground. Delayed Job Worker Pool runs a pool of Delayed Job workers **without** daemonizing them.\n\n[Salsify](http://salsify.com) is currently using Delayed Job Worker Pool to run multiple Delayed Job workers on a single Heroku PX dyno. Read more about our experience using this gem on our [blog](http://blog.salsify.com/engineering/delayed-job-worker-pooling).\n \n**This gem only works with MRI on Linux/MacOS X.**\n\n## Installation\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem 'delayed_job_worker_pool'\n```\n\nAnd then execute:\n\n    $ bundle\n\nOr install it yourself as:\n\n    $ gem install delayed_job_worker_pool\n\n## Usage\n\nFrom your Rails root directory run:\n\n```\ndelayed_job_worker_pool \u003cconfig file\u003e\n```\n\nThe config file is a Ruby DSL inspired by the [Puma](https://github.com/puma/puma) configuration DSL. Here's an example:\n\n```ruby\nworker_group do |g|\n  g.workers = Integer(ENV['NUM_WORKERS'] || 1)\n  g.queues = (ENV['QUEUES'] || ENV['QUEUE'] || '').split(',')\n  g.sleep_delay = ENV['WORKER_SLEEP_DELAY']\nend\n\npreload_app\n\n# This runs in the master process after it preloads the app\nafter_preload_app do\n  puts \"Master #{Process.pid} preloaded app\"\n  \n  # Don't hang on to database connections from the master after we've \n  # completed initialization\n  ActiveRecord::Base.connection_pool.disconnect!\nend\n\n# This runs in the worker processes after it has been forked\non_worker_boot do |worker_info|\n  puts \"Worker #{Process.pid} started\"\n  \n  # Reconnect to the database\n  ActiveRecord::Base.establish_connection\nend\n\n# This runs in the master process after a worker starts\nafter_worker_boot do |worker_info|\n  puts \"Master #{Process.pid} booted worker #{worker_info.name} with \" \\\n        \"process id #{worker_info.process_id}\"\nend\n\n# This runs in the master process after a worker shuts down\nafter_worker_shutdown do |worker_info|\n  puts \"Master #{Process.pid} detected dead worker #{worker_info.name} \" \\\n        \"with process id #{worker_info.process_id}\"\nend\n```\n\nYou can configure multiple worker groups, i.e.:\n\n```\nworker_group(:default) do |g|\n  g.workers = 1\n  g.queues = ['default']\nend\n\nworker_group(:mails) do |g|\n  g.workers = 1\n  g.queues = ['mail']\nend\n\n```\n\nHere's more information on each setting:\n\n* `worker_group` - You need at least one worker group. Group settings can be set as illustrated above. Worker group settings:\n  * `workers` - The number of Delayed Job worker processes to fork. The master process will relaunch workers that fail.\n  * Delayed Job worker settings (`queues`, `min_priority`, `max_priority`, `sleep_delay`, `read_ahead`) - These are passed through to the Delayed Job worker.\n* `preload_app` - This forces the master process to load Rails before forking worker processes causing the memory consumed by the code to be shared between workers. **If you use this setting make sure you re-establish any necessary connections in the on_worker_boot callback.**\n* `after_preload_app` - A callback that runs in the master process after preloading the app but before forking any workers.\n* `on_worker_boot` - A callback that runs in the worker process after it has been forked.\n* `after_worker_boot` - A callback that runs in the master process after a worker has been forked.\n* `after_worker_shutdown` - A callback that runs in the master process after a worker has been shutdown.\n\nAll settings are optional and nil values are ignored. \n\n## Upgrading from v0.2.x\n\n* Convert your worker settings to a single worker group (see _Usage_)\n* Please note the delayed job worker names changed to include ` group: \u003cgroup_name\u003e`, e.g. if you are monitoring them by their name\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at https://github.com/salsify/delayed_job_worker_pool.\n\n## License\n\nThe gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsalsify%2Fdelayed_job_worker_pool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsalsify%2Fdelayed_job_worker_pool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsalsify%2Fdelayed_job_worker_pool/lists"}