rykian / clockwork Goto Github PK
View Code? Open in Web Editor NEWThis project forked from adamwiggins/clockwork
A scheduler process to replace cron.
License: MIT License
This project forked from adamwiggins/clockwork
A scheduler process to replace cron.
License: MIT License
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
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:
clockwork/lib/clockwork/event.rb
Line 58 in cc1b7c9
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:
clockwork/lib/clockwork/manager.rb
Line 167 in cc1b7c9
Clockwork errors out when using Rails 6 default autoloader = : zeitwerk
Opened this on Zeitwerk as well - fxn/zeitwerk#83
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:
ruby 2.1.9/rails 3.2.22.4/clockwork 0.4.1
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.
Excellent library!
Two related services that could be worth mentioning in the README.
GoodJob (https://github.com/bensheldon/good_job), a modern asynchrony job worker.
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.
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?
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.
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)
I looking for some kind of parameter and sync_model document but I couldn't found any more
(https://github.com/tomykaira/clockwork#parameters)
https://github.com/tomykaira/clockwork
Hi,
https://github.com/tomykaira/clockwork is dead at the moment. I want to know if we users still have the support of the gem from this repository.
Thanks.
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
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.
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?
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.
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
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.
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
How can I make it always run cleanly at :00? Also, is it possible to make it run every in a day, BUT run the last one at :59
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.
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.
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.
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.
It appears that Clockwork uses the following fallback logic when determining what time zone to use
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
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.
There's two possible fixes
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.
EventStore
logicoptions[:tz] = model.tz if model.respond_to?(:tz) && !model.tz.nil?
In my opinion this is simpler and fixes the core issue
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!
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..
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...
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)
...
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?
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
If config[:tz]
is set to a value that is unvalid for TZInfo clockwork loads but doesn't run any task and there is no errors.
Requirements:
Results:
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?
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
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?
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.
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.
I think clockwork is good when it is simple and do something really well.
These "database events" package deserves its own gem.
Perhaps the CI matrix can be run in GitHub Actions? Or something else?
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.
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
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>'
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.
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.