A parallel workflow runner for Ruby that uses Redis for storage and ActiveJob for scheduling, enabling complex job dependencies.
Gush is a Ruby gem that acts as a parallel workflow runner, enabling developers to define and execute complex job dependencies using a directed acyclic graph (DAG) structure. It solves the problem of managing interdependent background jobs by providing a simple DSL to specify execution order, leveraging Redis for storage and ActiveJob for scheduling.
Ruby developers building applications with complex background job workflows, such as data processing pipelines, e-commerce order processing, or multi-step automation tasks.
Developers choose Gush for its simplicity in defining job dependencies, seamless integration with ActiveJob and Redis, and ability to run jobs in parallel, which improves performance over sequential job execution.
Fast and distributed workflow runner using ActiveJob and Redis
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Gush runs jobs concurrently based on directed acyclic graph dependencies, reducing overall processing time for complex workflows, as shown in examples where multiple FetchJobs execute in parallel.
The workflow definition uses an intuitive `run` method with `after` and `before` attributes, allowing developers to specify job dependencies without manual coordination code, as demonstrated in the sample workflows.
Leverages ActiveJob for scheduling, enabling compatibility with backends like Sidekiq, which simplifies integration into existing Rails applications and reduces setup overhead.
Workflows can be built dynamically at runtime, as seen in the NotifyWorkflow example where job counts vary based on input parameters, offering flexibility for variable-length processes.
Gush relies solely on Redis for storage, requiring additional setup for TTL and periodic cleanup calls (e.g., `expire_workflows`), which can be a maintenance burden if overlooked.
The tight integration with ActiveJob means projects using alternative job frameworks (e.g., Rake tasks or custom schedulers) cannot adopt Gush without significant refactoring.
For non-Rails Ruby applications, setting up the Gushfile and manually requiring jobs and workflows adds overhead compared to Rails' autoloading, as noted in the installation instructions.
Version upgrades, such as the move to Gush 3.0, require running migration commands and managing new expiration APIs, indicating potential instability and extra maintenance effort.