Project

pipeline

0.01
No commit activity in last 3 years
No release in over 3 years
Pipeline is a Rails plugin/gem to run asynchronous processes in a configurable pipeline.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

Pipeline¶ ↑

Description¶ ↑

Pipeline is a Rails plugin/gem to run asynchronous processes in a configurable pipeline.

Documentation¶ ↑

rdoc.info/projects/dtsato/pipeline

Features¶ ↑

  • Execution of sequential user-defined stages in an asynchronous pipeline

  • Persistence of pipeline instances and stages

  • Error recovery strategies:

    • Irrecoverable errors fail the entire pipeline

    • Recoverable errors are automatically retried (using dj’s exponential retry strategy)

    • Recoverable errors that require user input pause the pipeline for further retry

  • Cancelling/Resuming of a paused pipeline

  • Callbacks before and after executing stages and pipeline

Installation and Use¶ ↑

pipeline can be installed as either a RubyGem (recommended) or as a plugin.

Gem¶ ↑

To install pipeline as a RubyGem, add the following lines to your config/environment.rb file:

config.gem "pipeline"
config.gem "delayed_job"

And execute:

rake gems:install
rake gems:unpack # Optional, if you want to vendor the gem

Plugin¶ ↑

To install it as a plugin, run:

script/plugin install git://github.com/dtsato/pipeline.git

Generating the required tables¶ ↑

In order to persist your pipelines and stages, execute the following:

script/generate pipeline # To generate the migration scripts that will store pipelines
script/generate delayed_job # To generate the migration scripts for delayed_job
rake db:migrate

Starting your workers¶ ↑

You will also need to run your Delayed Job workers that will process the pipeline jobs in the background:

rake jobs:work

Dependencies¶ ↑

Usage¶ ↑

Check examples for more examples (including error-recovery and cancelling)

class Step1 < Pipeline::Stage::Base
  def perform
    puts("Started step 1")
    sleep 2
    puts("Finished step 1")
  end
end

class Step2 < Pipeline::Stage::Base
  def perform
    puts("Started step 2")
    sleep 3
    puts("Finished step 2")
  end
end

class TwoStepPipeline < Pipeline::Base
  define_stages Step1 >> Step2
end

Pipeline.start(TwoStepPipeline.new)

Copyright © 2009 Danilo Sato. See LICENSE for details.