Giter Site home page Giter Site logo

clockwork's People

Contributors

ajsharp avatar allcentury avatar brianhempel avatar cpuguy83 avatar dlackty avatar fddayan avatar javierjulio avatar jgorset avatar jordan-brough avatar koriroys avatar maxehmookau avatar mbhnyc avatar olleolleolle avatar oogali avatar pavlo avatar pboling avatar petergoldstein avatar phoffer avatar pmukerji avatar rastamhadi avatar reustmd avatar robisenberg avatar rykian avatar seanhussey avatar sonots avatar summera avatar takatoshi-maeda avatar tomykaira avatar torbjon avatar viswans83 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

clockwork's Issues

High memory usage

On my server, the amount of memory is almost proportional to the amount of tasks, I've 21 tasks, and it consumes 90% of the memory (8 GB), if I remove 2-3 tasks, the memory used decreases to 82% and so on. I guess it is the same issue that adamwiggins#17

Feature request: include clockwork plumbing in error reporting

We recently had problems with our event definitions where an :if proc had the incorrect arity. We only discovered this by eventually finding the clockwork error in the logs. We'd like to be able to configure an error_handler and have it also pick up any errors with event definition.

At the moment only the contents of the event is handled by the error handler:

@block.call(@job, @last)

It would be great if any tests and anything else related to clockwork plumbing were covered by the error handling - moving it out to the manager might be better:

log_error(e)

ruby/2.1.0/gems/sprockets-2.2.2/lib/sprockets/index.rb:80:in`expire_index!': can't modify immutable index (TypeError)

Hi

After adding all files under lib/ to my eager_load_path, clockwork is constantly throwing this error and won't start. This happens only on staging/production and not in dev(I'm assuming because eager_load_path is disabled by default in dev mode). Can you please help me out on this?

Note:

  1. all other processes like sidekiq, resque, rails console, nginx servers are working without any problems.
  2. I'm on ruby 2.1.9/rails 3.2.22.4/clockwork 0.4.1
  3. Also, as you would have guessed, I'm loading the rails env in the clock file

Callbacks for shutdown

We need to deregister some external services when an instance of Clockwork goes down gracefully. It would be great if Clockwork can support callbacks for shutdown and/or graceful_shutdown.
I can open a PR if this feature is ok to be accepted.

Two related services

Excellent library!

Two related services that could be worth mentioning in the README.

  1. GoodJob (https://github.com/bensheldon/good_job), a modern asynchrony job worker.

  2. Consul (https://github.com/hashicorp/consul), a service discovery and mesh tool, that also provide a simple distributed lock backed by raft.

    Useful to guarantee that only one instance of Clockwork is running at the same time, while providing fault tolerance.

Just wanted to mention these. You may already know about them. Feel free to close this issue.

Release 2.0.4

Version 2.0.3 has some breaking changes from 2.0.2 which appear to have been resolved in the master branch, is a release possible soonish?

Database Backed Events and Skip First Run

How to use skip_first_run options when using database backed events. I have attempted to use

sync_database_events(model: ScheduledEvent, every: frequency, skip_first_run: true)

but it has no effect.

job skipping semantics too subtle and scary?

the readme says:

If another task is already running at the specified time, clockwork will skip execution of the task with the :at option. If this is a problem, please use the :thread option to prevent the long running task from blocking clockwork's scheduler.

Whoah! That's quite a significant thing to happen silently because another job is running. If threading solves it completely, that's great! But that's also not super clear.

Will one of these always not run?

every(1.week, 'myjob1', :at => 'Monday 16:20')
every(1.week, 'myjob2', :at => 'Monday 16:20')

Will both of these always run?

every(1.week, 'myjob1', :at => 'Monday 16:20', thread: true)
every(1.week, 'myjob2', :at => 'Monday 16:20', thread: true)

QUESTION: clockwork will skip execution of the task with the :at option

I read through the docs, it seems conflict between at: and thread:

  • at:
    If another task is already running at the specified time, clockwork will skip execution of the task with the :at option. If this is a problem, please use the :thread option to prevent the long running task from blocking clockwork's scheduler.

  • thread:
    By default, clockwork runs in a single-process and single-thread. If an event handler takes a long time, the main routine of clockwork is blocked until it ends. Clockwork does not misbehave, but the next event is blocked, and runs when the process is returned to the clockwork routine.

I did some tests and I found the task still running after the process is returned to the clockwork routine. So Am I misunderstand some points or the documentation isn't right?

Is it should be If another task is already running at the specified time, clockwork will block execution of the task with the :at option

Gotcha: Daemonization on OSX does not work

I was testing daemonization in development on a Mac and it was not working. I would get the daemon boot output a-la

clockworkd.clock: pid file: /Users/developer/Documents/fd/tmp/clockworkd.clock.pid
clockworkd.clock: No output will be printed out (run with --log if needed)
clockworkd.clock: process with pid 78014 started.

(and even "process already running" if I re-ran the command quickly enough), but the process would ultimately not get started. (or fail immediately?)

Luckily, works as expected, on production Ubuntu.

Daylight savings

I just have a general question. Does clockwork cater for changes to the time by way of daylight savings? So for example you have a database driven schedule (checking for updates every minute) and one of the database rows has a timezone of Pacific/Auckland, to run every week on a Sunday at 3am.

When daylight savings rolls around and the clocks are turned backwards from 3am to 2am, is the scheduled event going to happen at the old 3am (which is now 2am) or the new 3am?

Testsuite fails with Minitest 5.20

As of clockwork git head ( 7ed9042 ),
testsuite fails with Minitest 5.20 as:

$ ruby -Ilib:test -rclockwork -e "Dir.glob('./test/**/*_test.rb').sort.each {|t| require t}"
Loaded suite -e
Started

  1) Error:
Clockwork::Manager#test_0012_exceptions are trapped and logged:
NameError: uninitialized constant MiniTest
    /builddir/build/GIT/clockwork/test/manager_test.rb:120:in `block (2 levels) in <top (required)>'

93 runs, 168 assertions, 0 failures, 1 errors, 0 skips

Already for a long while "Minitest" usage is preferred and with 5.19 "MiniTest" usage
is hidden by default.

A job can be triggered twice if the process is restarted at the wron moment

Hello, I have the following job definition:
every 1.hour, 'Follower Flow Follow Emails', at: '**:00'
So this job will be triggered at 01:00:00, 02:00:00, ...

The problem is I'm deploying with capistrano and if I deploy between 01:00:00 and 01:00:59. The job is trigerred again.

So I ended up with the folowing solution:
every 1.hour, 'Follower Flow Follow Emails', at: '**:00', if: ->(time) { time.sec.zero? }

Is that ok or there is an other way to do this ?

Thanks in advance,

Gil

Calling `configure` breaks everything

Hi.

This code doesn't work:

module Clockwork

  configure do |config|
    config[:sleep_timeout] = 1
    config[:logger] = Logger.new(STDOUT)
    config[:tz] = "CST"
    config[:max_threads] = 10
    config[:thread] = true
  end

  handler { |job| puts job.inspect }

  every(1.second, "frequent_hob")
end

But if you comment out the configure block, then everything runs fine.

Thanks.

Invalid identifier (TZInfo::InvalidTimezoneIdentifier) error after upgrade to 2.0.3

I am experiencing an error after updating the clockwork gem from 2.0.2 to 2.0.3:

app/vendor/bundle/ruby/2.5.0/gems/tzinfo-1.2.5/lib/tzinfo/zoneinfo_data_source.rb:208:in `load_timezone_info': Invalid identifier (TZInfo::InvalidTimezoneIdentifier)
	from /app/vendor/bundle/ruby/2.5.0/gems/tzinfo-1.2.5/lib/tzinfo/timezone.rb:92:in `get'
	from /app/vendor/bundle/ruby/2.5.0/gems/clockwork-2.0.3/lib/clockwork/event.rb:20:in `convert_timezone'
	from /app/vendor/bundle/ruby/2.5.0/gems/clockwork-2.0.3/lib/clockwork/event.rb:24:in `run_now?'
	from /app/vendor/bundle/ruby/2.5.0/gems/clockwork-2.0.3/lib/clockwork/manager.rb:163:in `block in events_to_run'
	from /app/vendor/bundle/ruby/2.5.0/gems/clockwork-2.0.3/lib/clockwork/manager.rb:163:in `select'
	from /app/vendor/bundle/ruby/2.5.0/gems/clockwork-2.0.3/lib/clockwork/manager.rb:163:in `events_to_run'
	from /app/vendor/bundle/ruby/2.5.0/gems/clockwork-2.0.3/lib/clockwork/manager.rb:133:in `tick'
	from /app/vendor/bundle/ruby/2.5.0/gems/clockwork-2.0.3/lib/clockwork/manager.rb:123:in `block (2 levels) in run_tick_loop'
	from /app/vendor/bundle/ruby/2.5.0/gems/clockwork-2.0.3/lib/clockwork/manager.rb:121:in `synchronize'
	from /app/vendor/bundle/ruby/2.5.0/gems/clockwork-2.0.3/lib/clockwork/manager.rb:121:in `block in run_tick_loop'

Tested with Ruby versions: 2.5.0 and 2.5.1

I can reproduce this locally (Ubuntu 16.04) running bundle exec clockwork config/clock.rb. This does not happen with version 2.0.2

Circular dependency when running with clockworkd daemon

Rails 4.1.9

/Users/manoelquirino/.rbenv/versions/2.2.2/gemsets/facebook_crawler/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:478:in `load_missing_constant': Circular dependency detected while autoloading constant AdPost (RuntimeError)

My clock.rb

require_relative 'config/boot'
require_relative 'config/environment'

require 'clockwork'

include Clockwork

configure do |config|
  config[:tz] = 'America/Recife'
end

every 1.minute, "NewCrawlerFetchNewPostsWorker" do
  NewCrawlerFetchNewPostsWorker.perform_async
end

every 1.minute, "GetPmsCrawlWorker" do
  GetPmsCrawlWorker.perform_async
end

every 1.minute, "GetCrawlPostsWorker" do
  GetCrawlPostsWorker.perform_async
end

every 1.minute, "GetTwitterCrawlWorker" do
  GetTwitterCrawlWorker.perform_async
end

every 1.minute, "GetCrawlWorker" do
  GetCrawlWorker.perform_async
end

every 1.minute, "NewCrawlerCollectPostsFromRedisWorker" do
  NewCrawlerCollectPostsFromRedisWorker.perform_async
end

every 1.minute, "RefreshAdCronWorker" do
  RefreshAdCronWorker.perform_async
end

every 1.minute, "AdUserControllerWorker" do
  AdUserControllerWorker.perform_async
end

every 30.minutes, "NewCrawlerPushCollectPostsToRedisWorker" do
  NewCrawlerPushCollectPostsToRedisWorker.perform_async
end

When I do clockwork clock.rb, works properly.
But when I do clockworkd run, appear this Circular dependecy error.

Tried to run with bundle, no success at all.

cannot load such file -- ./clock.rb (LoadError)

I am following the quick start guide with a fresh install of clockwork. I have added the following clock.rb to my lib folder.

require 'clockwork'
require './config/boot'
require './config/environment'

module Clockwork

  handler do |job|
    puts "Running #{job}"
  end
  
  every(10.seconds, 'expire_ads.job') { puts "hi" }
end

However running 'clockwork clock.rb' gives me the following error

/Users/drewdavis/.rbenv/versions/2.4.2/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:120:in `require': cannot load such file -- ./clock.rb (LoadError)
        from /Users/drewdavis/.rbenv/versions/2.4.2/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:120:in `require'
        from /Users/drewdavis/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/clockwork-2.0.2/bin/clockwork:12:in `<top (required)>'
        from /Users/drewdavis/.rbenv/versions/2.4.2/bin/clockwork:23:in `load'
        from /Users/drewdavis/.rbenv/versions/2.4.2/bin/clockwork:23:in `<main>'

I get the same error even with the entire file commented out. I haven't found a solution in the issues or with google search and am a bit lost on where the issue is coming from. Any help would be much appreciated.

skip_first_run option is not being honored

The following declaration causes the block of code to run at startup:

every(5.minutes, 'MyTask.scheduled_task', skip_first_run: true) { MyTask.delay.scheduled_task }

Happy to provide any additional information that is of use.

Clockwork Time Zone fallback logic doesn't work as expected for Database Synced Events

Firstly, a big thanks to the maintainers of Clockwork! The gem has been a staple of the Ruby community when it comes to scheduling jobs, and I know it takes time/effort to maintain.

Background

It appears that Clockwork uses the following fallback logic when determining what time zone to use

  1. Per-event configured time zone
  2. Clockwork configured time zone
  3. System Time

That is evident by looking at these few lines from event.rb

module Clockwork
  class Event
    def initialize(...)
      # ...

      # Use whatever time zone was configured for this specific event
      # If not, fall back on the Clockwork configured time zone
      @timezone = options.fetch(:tz, @manager.config[:tz])
    end

    def convert_timezone(t)
      # Use one of the time zones set above
      # If not set at all, defer to just using `t`, which was originally set
      # as Time.now, which will reflect local system time
      @timezone ? t.in_time_zone(@timezone) : t
    end

    # ...
  end
end

The Issue

I have a database backed event and my model has a #tz method that will return the time zone for Clockwork to use.

The sync_database_events job periodically refreshes the list of events from the database and registers any updated events with the manager. You can see this in EventStore#register_with_manager, which further calls EventStore#options

options[:tz] = model.tz if model.respond_to?(:tz)

If my model has a nil time zone, this will set options[:tz] = nil since my model responds to :tz (as it should). So the key :tz will exist in the config, but with a nil value

When that event is registered it uses Hash#fetch which will pull a key back even if it has a nil value.

# example
options = { tz: nil }
@timezone = options.fetch(:tz, "foo")
puts @timezone # => nil

So @timezone ends up as nil and the whole event falls back on using system time. This violates the expectation set for the gem - if my model has a nil time zone it should fall back on to using the Clockwork configured timezone before it tries using the system time.

My model has to respond to a :tz method if I want to use time zone functionality, so there's no way I can have it return nothing.

Proposed Fixes

There's two possible fixes

1) Don't use fetch

@timezone = options[:tz] || @manager.config[:tz]

However if someone did intend to pass in a nil value, this would fallback to the Clockwork configured value which might not be what they expected.

2) Modify EventStore logic

options[:tz] = model.tz if model.respond_to?(:tz) && !model.tz.nil?

In my opinion this is simpler and fixes the core issue

background job recommendation conflicts with thread feature

Hi, thanks for a great project!

I currently use cron and standalone rails runner invocations. This is Good Enough for me in many ways, but one problem is when two jobs run at the same time, they create entirely independent rails instances, taking up a lot of memory. And there is CPU overhead involved in creating a rails instance for each job.

So ideally I would have 1 rails instance that ran console-like commands inside it on a schedule. I think the clockwork can achieve exactly that.

The readme says:

The clock process only makes sense as a place to schedule work to be done, not to do the work

But there is also the :thread features, for long-running processes.

Is it perfectly possible, and sort of fine, to use the clock process to do the work, but just not recommended? What's the thread feature for? Maybe for work that has to be scheduled every 5 seconds on the nose or something, and can't even be 1 second late?

Thanks, and sorry of this is covered in the docs already. When I get an answer I'll submit some improvements to the docs!

Help understanding :skip_first_run option

Hi!

I'm reading through the documentation and have some worries about the meaning of the :skip_first_run option documented at https://github.com/Rykian/clockwork#skip_first_run

Say I have a scheduled task like this:

every(1.day, at: "01:45 am") {
  SomeDailyJob.perform_later
}

My expectation is that if I deploy my code to production and restart clockwork at noon the task should not get executed, but reading the documentation I am led to believe that I should define my task like so:

every(1.day, at: "01:45 am", skip_first_run: true) {
  SomeDailyJob.perform_later
}

Am I understanding this correctly? It seems to me that skip_first_run: true should be the default state..

Heroku Instructions

The link for the Quickstart for Heroku from the readme isn't working. I'd love to see an example of how to set this up with Heroku...

Clockwork::Event conflicts with Event Model

I have a rails model named Event, which is conflicting with Clockwork::Event.

If I put my Model within a module (ie Restaurant::Event), then this works properly. I could also rename the model (I've tested this code using other models without error). Another potential solution is to rename the model, but I think it would be easier to figure out how to solve this issue at it's source. Any help on this would be greatly appreciated. Thanks!

~/app/models/event.rb:

class Event < ActiveRecord::Base
  ...
end

~/gemfile:

gem 'clockwork', '~> 2', git: 'https://github.com/Rykian/clockwork'

~/clock.rb:

require 'clockwork'
require './config/boot'
require './config/environment'

include Clockwork

handler do |job|
  puts "Job: #{job}"
end

every(2.seconds, 'print first event') do
  puts Event.first.to_json unless Event.first.nil?
end

Terminal:

$ clockwork clock.rb
I, [2017-01-22T13:11:16.626278 #8084]  INFO -- : Starting clock for 1 events: [ print first event ]
I, [2017-01-22T13:11:16.626868 #8084]  INFO -- : Triggering 'print first event'
E, [2017-01-22T13:11:16.627195 #8084] ERROR -- : undefined method `first' for Clockwork::Event:Class (NoMethodError)
...

Instrumentation hooks for block execution

There is a nice hook for handling exceptions raised by blocks registered with every, but no such hook for instrumenting the execution of those blocks.

What happened for us was that a block was failing to execute and we were not aware since we did not register an error_handler. This worked for reporting errors, but did not include enough context to tell us that the error came from clockwork, which is required to implement a different alert policy on failure (create an incident after a very small number of failures, as opposed to relying on the error rate of our already high-throughput web application to create an incident).

What we ended up doing was patching the every method to instrument execution of the registered block with the New Relic Ruby gem, as such:

module Clockwork
  extend ::NewRelic::Agent::MethodTracer
  class << self
    include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation

    alias every_original every
    def every(period, job, options = {}, &_block)
      if block_given?
        every_original(period, job, options) do |*arguments|
          perform_action_with_newrelic_trace(class_name: 'Clockwork', category: :task, name: 'every', params: { 'Clockwork.job': job }) do
            yield(*arguments)
          end
        end
      else
        every_original(period, job, options)
      end
    end
  end
end

This seems like behavior that could be added to the Manager in a clean way. Thoughts?

Miss-behavior using haml 5.0.4 and temple 0.8.0

After my upgrade to rails 5.1 i am seeing this warning

DEPRECATION WARNING: ActionView::Template::Handlers::Erubis is deprecated and will be removed from Rails 5.2. Switch to ActionView::Template::Handlers::ERB::Erubi instead. (called from <top (required)>

When i upgrade the haml gem the template handler changes and the deprecation warning with it but it brings the temple gem and with it this runtime error:

RuntimeError:
       Unsupported callback newline
gems/clockwork-2.0.2/lib/clockwork/manager.rb:44:in `on'
gems/clockwork-2.0.2/lib/clockwork.rb:38:in `on'
gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb:86:in `dispatcher'
gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb:49:in `compile'
gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb:7:in `block in on_multi'
gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb:7:in `each'
gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb:7:in `on_multi'
gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb:82:in `dispatcher'
gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb:49:in `compile'
gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb:45:in `call'
gems/temple-0.8.0/lib/temple/engine.rb:50:in `block in call'
gems/temple-0.8.0/lib/temple/engine.rb:50:in `each'
gems/temple-0.8.0/lib/temple/engine.rb:50:in `inject'
gems/temple-0.8.0/lib/temple/engine.rb:50:in `call'
gems/haml-5.0.4/lib/haml/temple_engine.rb:41:in `compile'
gems/haml-5.0.4/lib/haml/engine.rb:61:in `initialize'

The callback method is also code. Here is the line that is throwing the error
https://github.com/Rykian/clockwork/blob/v2.0.2/lib/clockwork/manager.rb#L44

Spring DST change skips jobs from executing

Requirements:

  • set config[:tz] = timezone or have system clock in non UTC
  • use :at filter in specifications
  • in spring DST change the clock leaps forward

Results:

  • All tasks which execute with long interval like 1.day will skip an invocation

Why:

irb(main):016:0> Time.local(2020,3,29,23).in_time_zone(Time.zone)
=> Mon, 30 Mar 2020 02:00:00 EEST +03:00
irb(main):017:0> Time.local(2020,3,23,0).in_time_zone(Time.zone)
=> Mon, 23 Mar 2020 02:00:00 EET +02:00
irb(main):018:0> Time.local(2020,3,29,23).in_time_zone(Time.zone) - Time.local(2020,3,23,0).in_time_zone(Time.zone) >= 1.week
=> false

Suggested mitigation vectors. Thoughts?

  • Including a warning in README
  • Making the code handle the jump
    • under a configuration option?

I think we can work around this for now in our code that uses clockwork by just lowering the trigger interval. The :at filter should make sure they trigger correctly.

This also answer the question in #37

Error booting Rails following ActiveRecord example

I'm trying to use the database driven clockwork approach following the example given in the docs. Here is my clock.rb file:

require 'clockwork'
require 'clockwork/database_events'
require_relative './config/boot'
require_relative './config/environment'

module Clockwork

  # required to enable database syncing support
  Clockwork.manager = DatabaseEvents::Manager.new

  sync_database_events model: RecurringFreezeStart, every: 1.minute do |model_instance|
    Resque.enqueue(ScheduledFreezeStart, model_instance.id)
  end

  sync_database_events model: RecurringFreezeEnd, every: 1.minute do |model_instance|
    Resque.enqueue(ScheduledFreezeEnd, model_instance.id)
  end

end

When I run clockwork clock.rb I get the following errors:

$ clockwork clock.rb
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::VERSION
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OPENSSL_VERSION
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OPENSSL_LIBRARY_VERSION
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OPENSSL_VERSION_NUMBER
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OPENSSL_FIPS
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::Config::DEFAULT_CONFIG_FILE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKCS7::Signer
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKCS7::TEXT
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKCS7::NOCERTS
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKCS7::NOSIGS
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKCS7::NOCHAIN
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKCS7::NOINTERN
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKCS7::NOVERIFY
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKCS7::DETACHED
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKCS7::BINARY
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKCS7::NOATTR
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKCS7::NOSMIMECAP
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKey::RSA::PKCS1_PADDING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKey::RSA::SSLV23_PADDING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKey::RSA::NO_PADDING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKey::RSA::PKCS1_OAEP_PADDING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::PKey::EC::NAMED_CURVE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ExtConfig::HAVE_TLSEXT_HOST_NAME
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ExtConfig::TLS_DH_anon_WITH_AES_256_GCM_SHA384
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::SSLContext::SESSION_CACHE_OFF
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::SSLContext::SESSION_CACHE_CLIENT
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::SSLContext::SESSION_CACHE_SERVER
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::SSLContext::SESSION_CACHE_BOTH
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::SSLContext::SESSION_CACHE_NO_AUTO_CLEAR
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::SSLContext::SESSION_CACHE_NO_INTERNAL_LOOKUP
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::SSLContext::SESSION_CACHE_NO_INTERNAL_STORE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::SSLContext::SESSION_CACHE_NO_INTERNAL
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::SSLContext::METHODS
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ExtConfig::OPENSSL_NO_SOCK
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::VERIFY_NONE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::VERIFY_PEER
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::VERIFY_CLIENT_ONCE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_MICROSOFT_SESS_ID_BUG
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_NETSCAPE_CHALLENGE_BUG
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_SSLREF2_REUSE_CERT_TYPE_BUG
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_MICROSOFT_BIG_SSLV3_BUFFER
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_MSIE_SSLV2_RSA_PADDING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_SSLEAY_080_CLIENT_DH_BUG
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_TLS_D5_BUG
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_TLS_BLOCK_PADDING_BUG
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_ALL
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_SINGLE_ECDH_USE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_SINGLE_DH_USE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_EPHEMERAL_RSA
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_CIPHER_SERVER_PREFERENCE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_TLS_ROLLBACK_BUG
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_NO_SSLv2
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_NO_SSLv3
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_NO_TLSv1
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_NO_TLSv1_1
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_NO_TLSv1_2
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_NO_TICKET
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_NO_COMPRESSION
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_PKCS1_CHECK_1
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_PKCS1_CHECK_2
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_NETSCAPE_CA_DN_BUG
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::SSL::OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::Name::DEFAULT_OBJECT_TYPE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::Name::OBJECT_TYPE_TEMPLATE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::Name::COMPAT
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::Name::RFC2253
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::Name::ONELINE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::Name::MULTILINE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_OK
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_UNABLE_TO_GET_ISSUER_CERT
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_UNABLE_TO_GET_CRL
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_CERT_SIGNATURE_FAILURE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_CRL_SIGNATURE_FAILURE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_CERT_NOT_YET_VALID
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_CERT_HAS_EXPIRED
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_CRL_NOT_YET_VALID
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_CRL_HAS_EXPIRED
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_OUT_OF_MEM
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_SELF_SIGNED_CERT_IN_CHAIN
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_CERT_CHAIN_TOO_LONG
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_CERT_REVOKED
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_INVALID_CA
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_PATH_LENGTH_EXCEEDED
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_INVALID_PURPOSE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_CERT_UNTRUSTED
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_CERT_REJECTED
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_SUBJECT_ISSUER_MISMATCH
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_AKID_SKID_MISMATCH
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_AKID_ISSUER_SERIAL_MISMATCH
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_KEYUSAGE_NO_CERTSIGN
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_ERR_APPLICATION_VERIFICATION
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_FLAG_CRL_CHECK
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_FLAG_CRL_CHECK_ALL
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_FLAG_IGNORE_CRITICAL
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_FLAG_X509_STRICT
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_FLAG_ALLOW_PROXY_CERTS
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_FLAG_POLICY_CHECK
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_FLAG_EXPLICIT_POLICY
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_FLAG_INHIBIT_ANY
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_FLAG_INHIBIT_MAP
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_FLAG_NOTIFY_POLICY
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_FLAG_EXTENDED_CRL_SUPPORT
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_FLAG_USE_DELTAS
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_FLAG_CHECK_SS_SIGNATURE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_FLAG_TRUSTED_FIRST
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::V_FLAG_NO_ALT_CHAINS
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::PURPOSE_SSL_CLIENT
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::PURPOSE_SSL_SERVER
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::PURPOSE_NS_SSL_SERVER
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::PURPOSE_SMIME_SIGN
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::PURPOSE_SMIME_ENCRYPT
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::PURPOSE_CRL_SIGN
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::PURPOSE_ANY
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::PURPOSE_OCSP_HELPER
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::PURPOSE_TIMESTAMP_SIGN
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::TRUST_COMPAT
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::TRUST_SSL_CLIENT
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::TRUST_SSL_SERVER
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::TRUST_EMAIL
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::TRUST_OBJECT_SIGN
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::TRUST_OCSP_SIGN
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::TRUST_OCSP_REQUEST
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::TRUST_TSA
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::DEFAULT_CERT_AREA
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::DEFAULT_CERT_DIR
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::DEFAULT_CERT_FILE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::DEFAULT_CERT_DIR_ENV
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::DEFAULT_CERT_FILE_ENV
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::X509::DEFAULT_PRIVATE_DIR
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::RESPONSE_STATUS_INTERNALERROR
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::RESPONSE_STATUS_MALFORMEDREQUEST
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::REVOKED_STATUS_NOSTATUS
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::RESPONSE_STATUS_SIGREQUIRED
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::RESPONSE_STATUS_SUCCESSFUL
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::RESPONSE_STATUS_TRYLATER
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::REVOKED_STATUS_AFFILIATIONCHANGED
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::REVOKED_STATUS_CACOMPROMISE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::REVOKED_STATUS_CERTIFICATEHOLD
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::REVOKED_STATUS_CESSATIONOFOPERATION
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::REVOKED_STATUS_KEYCOMPROMISE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::REVOKED_STATUS_REMOVEFROMCRL
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::REVOKED_STATUS_SUPERSEDED
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::RESPONSE_STATUS_UNAUTHORIZED
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::REVOKED_STATUS_UNSPECIFIED
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::NOCERTS
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::NOINTERN
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::NOSIGS
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::NOCHAIN
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::NOVERIFY
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::NOEXPLICIT
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::NOCASIGN
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::NODELEGATED
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::NOCHECKS
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::TRUSTOTHER
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::RESPID_KEY
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::NOTIME
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::V_CERTSTATUS_GOOD
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::V_CERTSTATUS_REVOKED
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::V_CERTSTATUS_UNKNOWN
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::V_RESPID_NAME
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::OCSP::V_RESPID_KEY
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::Engine::METHOD_RSA
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::Engine::METHOD_DSA
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::Engine::METHOD_DH
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::Engine::METHOD_RAND
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::Engine::METHOD_CIPHERS
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::Engine::METHOD_DIGESTS
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::Engine::METHOD_ALL
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::Engine::METHOD_NONE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::UNIVERSAL_TAG_NAME
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::EOC
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::BOOLEAN
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::INTEGER
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::BIT_STRING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::OCTET_STRING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::NULL
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::OBJECT
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::OBJECT_DESCRIPTOR
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::EXTERNAL
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::REAL
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::ENUMERATED
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::EMBEDDED_PDV
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::UTF8STRING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::RELATIVE_OID
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::SEQUENCE
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::SET
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::NUMERICSTRING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::PRINTABLESTRING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::T61STRING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::VIDEOTEXSTRING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::IA5STRING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::UTCTIME
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::GENERALIZEDTIME
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::GRAPHICSTRING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::ISO64STRING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::GENERALSTRING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::UNIVERSALSTRING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::CHARACTER_STRING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle: warning: already initialized constant OpenSSL::ASN1::BMPSTRING
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/pkey.rb:8: warning: already initialized constant OpenSSL::PKey::DH::DEFAULT_1024
/Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/openssl-2.0.5/lib/openssl/pkey.rb:8: warning: previous definition of DEFAULT_1024 was here
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/pkey.rb:17: warning: already initialized constant OpenSSL::PKey::DH::DEFAULT_2048
/Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/openssl-2.0.5/lib/openssl/pkey.rb:17: warning: previous definition of DEFAULT_2048 was here
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/pkey.rb:30: warning: already initialized constant OpenSSL::PKey::DEFAULT_TMP_DH_CALLBACK
/Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/openssl-2.0.5/lib/openssl/pkey.rb:30: warning: previous definition of DEFAULT_TMP_DH_CALLBACK was here
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:18: warning: constant OpenSSL::Cipher::Cipher is deprecated
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:24: warning: already initialized constant OpenSSL::Cipher::AES
/Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/openssl-2.0.5/lib/openssl/cipher.rb:24: warning: previous definition of AES was here
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:18: warning: constant OpenSSL::Cipher::Cipher is deprecated
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:24: warning: already initialized constant OpenSSL::Cipher::CAST5
/Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/openssl-2.0.5/lib/openssl/cipher.rb:24: warning: previous definition of CAST5 was here
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:18: warning: constant OpenSSL::Cipher::Cipher is deprecated
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:24: warning: already initialized constant OpenSSL::Cipher::BF
/Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/openssl-2.0.5/lib/openssl/cipher.rb:24: warning: previous definition of BF was here
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:18: warning: constant OpenSSL::Cipher::Cipher is deprecated
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:24: warning: already initialized constant OpenSSL::Cipher::DES
/Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/openssl-2.0.5/lib/openssl/cipher.rb:24: warning: previous definition of DES was here
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:18: warning: constant OpenSSL::Cipher::Cipher is deprecated
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:24: warning: already initialized constant OpenSSL::Cipher::IDEA
/Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/openssl-2.0.5/lib/openssl/cipher.rb:24: warning: previous definition of IDEA was here
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:18: warning: constant OpenSSL::Cipher::Cipher is deprecated
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:24: warning: already initialized constant OpenSSL::Cipher::RC2
/Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/openssl-2.0.5/lib/openssl/cipher.rb:24: warning: previous definition of RC2 was here
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:18: warning: constant OpenSSL::Cipher::Cipher is deprecated
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:24: warning: already initialized constant OpenSSL::Cipher::RC4
/Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/openssl-2.0.5/lib/openssl/cipher.rb:24: warning: previous definition of RC4 was here
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:18: warning: constant OpenSSL::Cipher::Cipher is deprecated
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:24: warning: already initialized constant OpenSSL::Cipher::RC5
/Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/openssl-2.0.5/lib/openssl/cipher.rb:24: warning: previous definition of RC5 was here
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:28: warning: constant OpenSSL::Cipher::Cipher is deprecated
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:33: warning: already initialized constant OpenSSL::Cipher::AES128
/Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/openssl-2.0.5/lib/openssl/cipher.rb:33: warning: previous definition of AES128 was here
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:28: warning: constant OpenSSL::Cipher::Cipher is deprecated
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:33: warning: already initialized constant OpenSSL::Cipher::AES192
/Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/openssl-2.0.5/lib/openssl/cipher.rb:33: warning: previous definition of AES192 was here
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:28: warning: constant OpenSSL::Cipher::Cipher is deprecated
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:33: warning: already initialized constant OpenSSL::Cipher::AES256
/Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/openssl-2.0.5/lib/openssl/cipher.rb:33: warning: previous definition of AES256 was here
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:64: warning: constant OpenSSL::Cipher::Cipher is deprecated
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:64: warning: constant OpenSSL::Cipher::Cipher is deprecated
/Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:64:in `<class:Cipher>': superclass mismatch for class Cipher (TypeError)
	from /Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:16:in `<module:OpenSSL>'
	from /Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl/cipher.rb:15:in `<top (required)>'
	from /Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl.rb:17:in `require'
	from /Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/openssl.rb:17:in `<top (required)>'
	from /Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activesupport-5.1.4/lib/active_support/key_generator.rb:2:in `require'
	from /Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activesupport-5.1.4/lib/active_support/key_generator.rb:2:in `<top (required)>'
	from /Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/railties-5.1.4/lib/rails/application.rb:4:in `require'
	from /Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/railties-5.1.4/lib/rails/application.rb:4:in `<top (required)>'
	from /Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/railties-5.1.4/lib/rails.rb:12:in `require'
	from /Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/railties-5.1.4/lib/rails.rb:12:in `<top (required)>'
	from /Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/railties-5.1.4/lib/rails/all.rb:1:in `require'
	from /Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/railties-5.1.4/lib/rails/all.rb:1:in `<top (required)>'
	from /Users/james/sites/mergefreezev2/config/application.rb:3:in `require'
	from /Users/james/sites/mergefreezev2/config/application.rb:3:in `<top (required)>'
	from /Users/james/sites/mergefreezev2/config/environment.rb:2:in `require_relative'
	from /Users/james/sites/mergefreezev2/config/environment.rb:2:in `<top (required)>'
	from /Users/james/sites/mergefreezev2/clock.rb:4:in `require_relative'
	from /Users/james/sites/mergefreezev2/clock.rb:4:in `<top (required)>'
	from /Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /Users/james/.rbenv/versions/2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /Users/james/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/clockwork-2.0.2/bin/clockwork:12:in `<top (required)>'
	from /Users/james/.rbenv/versions/2.4.1/bin/clockwork:22:in `load'
	from /Users/james/.rbenv/versions/2.4.1/bin/clockwork:22:in `<main>'

The issue seems to stem from the require_relative './config/environment' line.

I'm using rails 5.1 and ruby 2.4.1, and OS is MacOS High Sierra

Here are the gems I'm using in the project:

$ gem list

*** LOCAL GEMS ***

actioncable (5.1.4, 5.1.3)
actionmailer (5.1.4, 5.1.3)
actionpack (5.1.4, 5.1.3)
actionview (5.1.4, 5.1.3)
activejob (5.1.4, 5.1.3)
activemodel (5.1.4, 5.1.3)
activerecord (5.1.4, 5.1.3)
activesupport (5.1.4, 5.1.3)
addressable (2.5.2)
arel (8.0.0)
bcrypt (3.1.11)
bigdecimal (default: 1.3.0)
bindex (0.5.0)
builder (3.2.3)
bundler (1.16.1, 1.15.4)
byebug (9.1.0)
capybara (2.17.0, 2.16.1, 2.15.1)
childprocess (0.8.0, 0.7.1)
chronic (0.10.2)
clockwork (2.0.2)
coderay (1.1.2)
coffee-rails (4.2.2)
coffee-script (2.4.1)
coffee-script-source (1.12.2)
commonjs (0.2.7)
concurrent-ruby (1.0.5)
crass (1.0.3)
devise (4.3.0)
did_you_mean (1.1.0)
domain_name (0.5.20170404)
erubi (1.7.0, 1.6.1)
et-orbi (1.0.8)
execjs (2.7.0)
faraday (0.13.1, 0.12.2)
ffi (1.9.18)
font-awesome-sass (4.7.0)
geoip (1.6.3)
globalid (0.4.1, 0.4.0)
hashie (3.5.7, 3.5.6)
http-cookie (1.0.3)
httparty (0.15.6)
i18n (0.9.1, 0.8.6)
io-console (default: 0.4.6)
jbuilder (2.7.0)
jquery-rails (4.3.1)
json (default: 2.0.2)
jwt (1.5.6)
less (2.6.0)
less-rails (2.8.0)
listen (3.1.5)
loofah (2.1.1, 2.0.3)
mail (2.7.0, 2.6.6)
mailgun_rails (0.9.0)
method_source (0.9.0, 0.8.2)
mime-types (3.1)
mime-types-data (3.2016.0521)
mini_mime (1.0.0, 0.1.4)
mini_portile2 (2.3.0, 2.2.0)
minitest (5.11.1)
mono_logger (1.1.0)
multi_json (1.12.2, 1.12.1)
multi_xml (0.6.0)
multipart-post (2.0.0)
mustermann (1.0.1)
mysql2 (0.4.10, 0.4.9)
net-telnet (0.1.1)
netrc (0.11.0)
nio4r (2.2.0, 2.1.0)
nokogiri (1.8.1, 1.8.0)
oauth2 (1.4.0)
octokit (4.7.0)
omniauth (1.8.1, 1.6.1)
omniauth-github (1.3.0, 1.1.2)
omniauth-google-oauth2 (0.5.2)
omniauth-oauth2 (1.5.0, 1.4.0, 1.3.1)
omniauth-slack (2.3.0)
openssl (2.0.5, default: 2.0.3)
orm_adapter (0.5.0)
power_assert (0.4.1)
pry (0.11.3, 0.10.4)
psych (default: 2.2.2)
public_suffix (3.0.1, 3.0.0)
puma (3.11.0, 3.10.0)
rack (2.0.3)
rack-protection (2.0.0)
rack-test (0.8.2, 0.7.0, 0.6.3)
rails (5.1.4, 5.1.3)
rails-dom-testing (2.0.3)
rails-html-sanitizer (1.0.3)
railties (5.1.4, 5.1.3)
rake (12.3.0, 12.0.0)
rb-fsevent (0.10.2)
rb-inotify (0.9.10)
rdoc (default: 5.0.0)
redis (4.0.1)
redis-namespace (1.6.0)
responders (2.4.0)
resque (1.27.4)
resque-scheduler (4.3.1)
resque-scheduler-web (1.1.0)
resque-web (0.0.12)
rest-client (2.0.2)
ruby_dep (1.5.0)
rubyzip (1.2.1)
rufus-scheduler (3.4.2)
sass (3.5.5, 3.5.4, 3.5.3, 3.5.1)
sass-listen (4.0.0)
sass-rails (5.0.7, 5.0.6)
sawyer (0.8.1)
selenium-webdriver (3.8.0, 3.7.0, 3.5.2, 3.5.1)
sinatra (2.0.0)
slop (3.6.0)
spring (2.0.2)
spring-watcher-listen (2.0.1)
sprockets (3.7.1)
sprockets-rails (3.2.1)
sqlite3 (1.3.13)
test-unit (3.2.3)
thor (0.20.0)
thread_safe (0.3.6)
tilt (2.0.8)
turbolinks (5.0.1)
turbolinks-source (5.0.3)
twitter-bootstrap-rails (4.0.0)
tzinfo (1.2.4, 1.2.3)
tzinfo-data (1.2017.3)
uglifier (4.1.2, 4.1.0, 3.2.0)
unf (0.1.4)
unf_ext (0.0.7.4)
vegas (0.1.11)
warden (1.2.7)
web-console (3.5.1)
websocket-driver (0.6.5)
websocket-extensions (0.1.3, 0.1.2)
xmlrpc (0.2.1)
xpath (3.0.0, 2.1.0)

Any ideas?

Raising in error_handler doesn't quit process.

I'm running clockwork using clockwork lib/clock.rb and have a custom error_handler which reraises the exception in development, or quietly logs to Sentry.io in staging/production.

    #
    # Implement a custom error handler to track clockwork
    # error events into Sentry via Raven.
    #
    error_handler do |exception|
        # Throw these direct in development so that we
        # can see and action them sooner.
        if Rails.env.development?
            # Raise the exception again.
            raise exception
        else
            # Log the error to Sentry via Raven.
            Raven.capture_exception(exception)
        end
    end

However, despite what the README suggests this doesn't appear to break/stop the process and display the error in the console, it instead just carries on quietly.

Any suggestions on how to work around this? Would ideally like error_handler to break things in development when hitting errors.

Task not running each full hour

Hi,

I'm using Clockwork version 0.7.0 (yes, I know it's out of date), and I set a job to run each hour:
every(1.hour, 'My job', :at => '**:00')

But the job is running only once in few hours:

2017-09-17T00:00:07.701970+00:00 app clock.1 - - Clockwork: My job
2017-09-17T02:00:50.929599+00:00 app clock.1 - - Clockwork: My job
2017-09-17T04:00:43.244756+00:00 app clock.1 - - Clockwork: My job
2017-09-17T07:00:02.049012+00:00 app clock.1 - - Clockwork: My job
2017-09-17T09:00:05.517400+00:00 app clock.1 - - Clockwork: My job
2017-09-17T10:00:45.606928+00:00 app clock.1 - - Clockwork: My job
2017-09-17T12:00:21.329608+00:00 app clock.1 - - Clockwork: My job
2017-09-17T14:00:37.216280+00:00 app clock.1 - - Clockwork: My job

As you can see in the log, sometimes it runs every full hour but sometimes every 2 or even 3 full hours.

What am I doing wrong? Maybe is there bug fix related to issue like this? It very important for me that it will be reliable, and run the job each full hour.

Thanks.

Weekly cron job not running

I have been using the following cron:
every(1.week, 'create_week.job', :at => 'Monday 00:05', :tz => 'UTC')
It's not getting triggered. I also have every(30.minutes, 'coins.count.job') that is working completely fine.

Please help me if I am doing anything wrong.

Not runnable in Windows

Commit db452cc made clockwork incompatible with Windows by listening for SIGHUP, which is not available in Windows builds of Ruby.

#7 fixes it.

RuntimeError: Unsupported callback newline

It seems that since I recently upgraded from v1.2 to v2.0, I've been occasionally getting this error:

RuntimeError: Unsupported callback newline
  File "/app/vendor/bundle/ruby/2.3.0/gems/clockwork-2.0.2/lib/clockwork/manager.rb", line 44, in on
  File "/app/vendor/bundle/ruby/2.3.0/gems/clockwork-2.0.2/lib/clockwork.rb", line 38, in on
  ...

Any idea why?

Here's a full stacktrace:

RuntimeError: Unsupported callback newline
  File "/app/vendor/bundle/ruby/2.3.0/gems/clockwork-2.0.2/lib/clockwork/manager.rb", line 44, in on
  File "/app/vendor/bundle/ruby/2.3.0/gems/clockwork-2.0.2/lib/clockwork.rb", line 38, in on
  File "/app/vendor/bundle/ruby/2.3.0/gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb", line 86, in dispatcher
  File "/app/vendor/bundle/ruby/2.3.0/gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb", line 49, in compile
  File "/app/vendor/bundle/ruby/2.3.0/gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb", line 7, in block in on_multi
  File "/app/vendor/bundle/ruby/2.3.0/gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb", line 7, in each
  File "/app/vendor/bundle/ruby/2.3.0/gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb", line 7, in on_multi
  File "/app/vendor/bundle/ruby/2.3.0/gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb", line 82, in dispatcher
  File "/app/vendor/bundle/ruby/2.3.0/gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb", line 49, in compile
  File "/app/vendor/bundle/ruby/2.3.0/gems/temple-0.8.0/lib/temple/mixins/dispatcher.rb", line 45, in call
  File "/app/vendor/bundle/ruby/2.3.0/gems/temple-0.8.0/lib/temple/engine.rb", line 50, in block in call
  File "/app/vendor/bundle/ruby/2.3.0/gems/temple-0.8.0/lib/temple/engine.rb", line 50, in each
  File "/app/vendor/bundle/ruby/2.3.0/gems/temple-0.8.0/lib/temple/engine.rb", line 50, in inject
  File "/app/vendor/bundle/ruby/2.3.0/gems/temple-0.8.0/lib/temple/engine.rb", line 50, in call
  File "/app/vendor/bundle/ruby/2.3.0/gems/haml-5.0.2/lib/haml/temple_engine.rb", line 41, in compile
  File "/app/vendor/bundle/ruby/2.3.0/gems/haml-5.0.2/lib/haml/engine.rb", line 61, in initialize
  File "/app/vendor/bundle/ruby/2.3.0/gems/haml-5.0.2/lib/haml/plugin.rb", line 16, in new
  File "/app/vendor/bundle/ruby/2.3.0/gems/haml-5.0.2/lib/haml/plugin.rb", line 16, in compile
  File "/app/vendor/bundle/ruby/2.3.0/gems/haml-5.0.2/lib/haml/plugin.rb", line 23, in call
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/template.rb", line 281, in compile
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/template.rb", line 257, in block (2 levels) in compile!
  File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-5.1.3/lib/active_support/notifications.rb", line 168, in instrument
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/template.rb", line 348, in instrument
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/template.rb", line 256, in block in compile!
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/template.rb", line 244, in synchronize
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/template.rb", line 244, in compile!
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/template.rb", line 156, in block in render
  File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-5.1.3/lib/active_support/notifications.rb", line 166, in block in instrument
  File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-5.1.3/lib/active_support/notifications/instrumenter.rb", line 21, in instrument
  File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-5.1.3/lib/active_support/notifications.rb", line 166, in instrument
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/template.rb", line 352, in instrument_render_template
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/template.rb", line 155, in render
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/renderer/template_renderer.rb", line 52, in block (2 levels) in render_template
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/renderer/abstract_renderer.rb", line 42, in block in instrument
  File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-5.1.3/lib/active_support/notifications.rb", line 166, in block in instrument
  File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-5.1.3/lib/active_support/notifications/instrumenter.rb", line 21, in instrument
  File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-5.1.3/lib/active_support/notifications.rb", line 166, in instrument
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/renderer/abstract_renderer.rb", line 41, in instrument
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/renderer/template_renderer.rb", line 51, in block in render_template
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/renderer/template_renderer.rb", line 59, in render_with_layout
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/renderer/template_renderer.rb", line 50, in render_template
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/renderer/template_renderer.rb", line 14, in render
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/renderer/renderer.rb", line 42, in render_template
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/renderer/renderer.rb", line 23, in render
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/rendering.rb", line 103, in _render_template
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionpack-5.1.3/lib/action_controller/metal/streaming.rb", line 217, in _render_template
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-5.1.3/lib/action_view/rendering.rb", line 83, in render_to_body
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionpack-5.1.3/lib/action_controller/metal/rendering.rb", line 52, in render_to_body
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionpack-5.1.3/lib/action_controller/metal/renderers.rb", line 141, in render_to_body
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionpack-5.1.3/lib/abstract_controller/rendering.rb", line 46, in render_to_string
  File "/app/vendor/bundle/ruby/2.3.0/gems/actionpack-5.1.3/lib/action_controller/metal/rendering.rb", line 41, in render_to_string
  File "/app/app/models/email_agent/outbound.rb", line 39, in deliver
  File "/app/app/models/delivery_engine.rb", line 13, in block in deliver
  File "/app/vendor/bundle/ruby/2.3.0/gems/retries-0.0.5/lib/retries.rb", line 46, in with_retries
  File "/app/app/models/delivery_engine.rb", line 12, in deliver
  File "/app/app/jobs/delivery_job.rb", line 27, in block in run
  File "/app/vendor/bundle/ruby/2.3.0/gems/activerecord-5.1.3/lib/active_record/connection_adapters/abstract/connection_pool.rb", line 408, in with_connection
  File "/app/app/jobs/delivery_job.rb", line 26, in run

Undefined method `deprecator' error when loading Rails 7.1 environment in clock.rb

An error is raised when trying to run the clockwork binary (from gem version 2.0.0) with the Rails 7.1.1 environment.

My understanding is that this is due to a change between Rails 7.0.8 and 7.1.0, as detailed here.

lib/clock.rb

require 'config/boot'
require 'config/environment'

require 'clockwork'

module Clockwork
	every(10.minutes, 'Nacten.run_loop') { Macten.run_loop.delay }
end

Running clockwork lib/clock.rb results in:

/usr/local/bundle/gems/activesupport-7.1.1/lib/active_support/core_ext/array/conversions.rb:108:in `<class:Array>': undefined method `deprecator' for ActiveSupport:Module (NoMethodError)

  deprecate to_default_s: :to_s, deprecator: ActiveSupport.deprecator
                                                          ^^^^^^^^^^^
Did you mean?  deprecate_constant
	from /usr/local/bundle/gems/activesupport-7.1.1/lib/active_support/core_ext/array/conversions.rb:8:in `<top (required)>'
	from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from /usr/local/bundle/gems/activesupport-7.1.1/lib/active_support/duration.rb:3:in `<top (required)>'
	from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from /usr/local/bundle/gems/activesupport-7.1.1/lib/active_support/core_ext/time/calculations.rb:3:in `<top (required)>'
	from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from /usr/local/bundle/gems/activesupport-7.1.1/lib/active_support/core_ext/time.rb:4:in `<top (required)>'
	from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from /usr/local/bundle/gems/activesupport-7.1.1/lib/active_support/time.rb:12:in `<top (required)>'
	from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from /usr/local/bundle/gems/clockwork-2.0.4/lib/clockwork.rb:2:in `<top (required)>'
	from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from <internal:/usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from /usr/local/bundle/gems/clockwork-2.0.4/bin/clockwork:5:in `<top (required)>'
	from /usr/local/bundle/bin/clockwork:25:in `load'
	from /usr/local/bundle/bin/clockwork:25:in `<main>'

Mention active_support/time in README.

Breaking change: clockwork stopped working after updating from 2.0.2 to 2.0.3 due to 3.minutes getting NoMethodError, and it turned out, this change caused the issue.

7418d24

I've fixed the issue by adding back 'active_support/time'.

require 'clockwork'
require 'active_support/time'

As we have config examples with 3.minutes or 1.hour in README, I believe we should also have require 'active_support/time' in the examples as well.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.