diff --git a/README.md b/README.md index d66c64132..f5564b7d8 100644 --- a/README.md +++ b/README.md @@ -37,10 +37,9 @@ GoodJob is a multithreaded, Postgres-based ActiveJob backend for Ruby on Rails. ``` 1. In production, the scheduler is designed to run in its own process: - -```ruby -# TBD -``` + ```bash + $ bundle exec good_job + ``` ## Installation Add this line to your application's Gemfile: diff --git a/bin/good_job b/bin/good_job new file mode 100755 index 000000000..193221432 --- /dev/null +++ b/bin/good_job @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +require 'good_job/cli' +GoodJob::CLI.start(ARGV) diff --git a/good_job.gemspec b/good_job.gemspec index c6755b89f..2e69f2012 100644 --- a/good_job.gemspec +++ b/good_job.gemspec @@ -24,9 +24,12 @@ Gem::Specification.new do |spec| end spec.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.md"] + spec.executables = "good_job" - spec.add_dependency "rails", "~> 6.0.2", ">= 6.0.2.1" + spec.add_dependency "concurrent-ruby" + spec.add_dependency "rails" + spec.add_dependency "thor" + spec.add_development_dependency "database_cleaner" spec.add_development_dependency "pg" spec.add_development_dependency "rspec-rails" - spec.add_development_dependency "database_cleaner" end diff --git a/lib/good_job.rb b/lib/good_job.rb index 121e5637a..37b27b140 100644 --- a/lib/good_job.rb +++ b/lib/good_job.rb @@ -1,4 +1,4 @@ -require "good_job/railtie" +require "rails" require 'good_job/lockable' require 'good_job/job' diff --git a/lib/good_job/cli.rb b/lib/good_job/cli.rb new file mode 100644 index 000000000..766e3767f --- /dev/null +++ b/lib/good_job/cli.rb @@ -0,0 +1,19 @@ +require 'thor' + +module GoodJob + class CLI < Thor + RAILS_ENVIRONMENT_RB = File.expand_path("config/environment.rb") + + desc :start, "Start jobs" + def start + require RAILS_ENVIRONMENT_RB + + scheduler = GoodJob::Scheduler.new + Kernel.loop do + sleep 1 + end + end + + default_task :start + end +end diff --git a/spec/good_job/cli_spec.rb b/spec/good_job/cli_spec.rb new file mode 100644 index 000000000..e977ade80 --- /dev/null +++ b/spec/good_job/cli_spec.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true +require 'rails_helper' +require 'good_job/cli' + +RSpec.describe GoodJob::CLI do + before do + stub_const 'GoodJob::CLI::RAILS_ENVIRONMENT_RB', File.expand_path("spec/dummy/config/environment.rb") + end + + describe '#start' do + it 'initializes a scheduler' do + scheduler_mock = instance_double GoodJob::Scheduler + allow(GoodJob::Scheduler).to receive(:new).and_return scheduler_mock + allow(Kernel).to receive(:loop) + + cli = described_class.new([], {}, {}) + cli.start + + expect(GoodJob::Scheduler).to have_received(:new) + end + end +end diff --git a/spec/good_job/scheduler_spec.rb b/spec/good_job/scheduler_spec.rb index ff3615d07..ba622a7e3 100644 --- a/spec/good_job/scheduler_spec.rb +++ b/spec/good_job/scheduler_spec.rb @@ -30,7 +30,7 @@ def perform(*args, **kwargs) self.queue_name = 'test' self.priority = 50 retry_on(RetryableError, wait: 0, attempts: 3) do |job, error| - puts "FAILED" + # puts "FAILED" end def perform(*args, **kwargs)