From 7210140de62dd9024aa952e2ad73a4715c8932e9 Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Wed, 24 Mar 2021 13:52:36 +0500 Subject: [PATCH] Bring back Que gem for painless migration --- Gemfile | 4 +- Gemfile.lock | 21 ++++- app/models/que_job.rb | 3 + config/initializers/que.rb | 14 +-- config/routes.rb | 2 +- lib/daemons/que.rb | 86 +++++++++---------- lib/daemons/que_ctl | 11 ++- test/jobs/domain_delete_job_test.rb | 4 +- test/jobs/domain_expire_email_job_test.rb | 8 +- .../regenerate_registrar_whoises_job_test.rb | 13 --- 10 files changed, 84 insertions(+), 82 deletions(-) create mode 100644 app/models/que_job.rb delete mode 100644 test/jobs/regenerate_registrar_whoises_job_test.rb diff --git a/Gemfile b/Gemfile index 6f3e7daab..565a14126 100644 --- a/Gemfile +++ b/Gemfile @@ -64,8 +64,10 @@ gem 'omniauth-tara', github: 'internetee/omniauth-tara' gem 'epp', github: 'internetee/epp', branch: :master gem 'epp-xml', '1.1.0', github: 'internetee/epp-xml' -gem 'sidekiq' +gem 'que' gem 'daemons-rails', '1.2.1' +gem 'que-web' +gem 'sidekiq' gem 'pdfkit' gem 'jquery-ui-rails', '5.0.5' gem 'airbrake' diff --git a/Gemfile.lock b/Gemfile.lock index b19e1810d..b1f02ee25 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -190,6 +190,7 @@ GEM execjs coffee-script-source (1.12.2) concurrent-ruby (1.1.8) + connection_pool (2.2.3) countries (3.1.0) i18n_data (~> 0.11.0) sixarm_ruby_unaccent (~> 1.1) @@ -301,6 +302,8 @@ GEM railties (>= 3.0) msgpack (1.4.2) multi_json (1.15.0) + mustermann (1.1.1) + ruby2_keywords (~> 0.0.1) netrc (0.11.0) nio4r (2.5.7) nokogiri (1.10.10) @@ -334,6 +337,11 @@ GEM public_suffix (4.0.6) puma (5.2.2) nio4r (~> 2.0) + que (0.14.3) + que-web (0.7.2) + erubis + que (~> 0.8) + sinatra rack (2.2.3) rack-oauth2 (1.16.0) activesupport @@ -341,6 +349,8 @@ GEM httpclient json-jwt (>= 1.11.0) rack (>= 2.1.0) + rack-protection (2.1.0) + rack rack-test (1.1.0) rack (>= 1.0, < 3) rails (6.0.3.6) @@ -375,8 +385,8 @@ GEM activesupport (>= 5.2.4) i18n rbtree3 (0.6.0) - regexp_parser (2.1.1) redis (4.2.5) + regexp_parser (2.1.1) request_store (1.5.0) rack (>= 1.4) responders (3.0.1) @@ -424,6 +434,11 @@ GEM simplecov-html (0.10.2) simpleidn (0.1.1) unf (~> 0.1.4) + sinatra (2.1.0) + mustermann (~> 1.0) + rack (~> 2.2) + rack-protection (= 2.1.0) + tilt (~> 2.0) sixarm_ruby_unaccent (1.2.0) socksify (1.7.1) sprockets (4.0.2) @@ -536,6 +551,8 @@ DEPENDENCIES pg (= 1.2.2) pry (= 0.14.0) puma + que + que-web rails (~> 6.0) ransack (~> 2.3) rest-client @@ -555,4 +572,4 @@ DEPENDENCIES wkhtmltopdf-binary (~> 0.12.5.1) BUNDLED WITH - 2.2.2 + 2.2.15 diff --git a/app/models/que_job.rb b/app/models/que_job.rb new file mode 100644 index 000000000..40ef6a67e --- /dev/null +++ b/app/models/que_job.rb @@ -0,0 +1,3 @@ +class QueJob < ApplicationRecord + self.primary_key = 'job_id' +end diff --git a/config/initializers/que.rb b/config/initializers/que.rb index ded9747dc..560b1ec1e 100644 --- a/config/initializers/que.rb +++ b/config/initializers/que.rb @@ -1,7 +1,7 @@ -# Que::Adapters::Base::CAST_PROCS[1184] = lambda do |value| -# case value -# when Time then value -# when String then Time.parse(value) -# else raise "Unexpected time class: #{value.class} (#{value.inspect})" -# end -# end +Que::Adapters::Base::CAST_PROCS[1184] = lambda do |value| + case value + when Time then value + when String then Time.parse(value) + else raise "Unexpected time class: #{value.class} (#{value.inspect})" + end +end diff --git a/config/routes.rb b/config/routes.rb index cef5ac2ab..4e78b7c0f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -324,7 +324,7 @@ Rails.application.routes.draw do resources :bounced_mail_addresses, only: %i[index show destroy] authenticate :admin_user do - # mount Que::Web, at: 'que' + mount Que::Web, at: 'que' mount Sidekiq::Web, at: 'sidekiq' end end diff --git a/lib/daemons/que.rb b/lib/daemons/que.rb index ece78390a..e246212ba 100755 --- a/lib/daemons/que.rb +++ b/lib/daemons/que.rb @@ -1,43 +1,43 @@ -# #!/usr/bin/env ruby -# -# ENV["RAILS_ENV"] ||= "production" -# -# root = File.expand_path(File.dirname(__FILE__)) -# root = File.dirname(root) until File.exist?(File.join(root, 'config')) -# Dir.chdir(root) -# -# require File.join(root, "config", "environment") -# -# # from que gem rake task -# if defined?(::Rails) && Rails.respond_to?(:application) -# # ActiveSupport's dependency autoloading isn't threadsafe, and Que uses -# # multiple threads, which means that eager loading is necessary. Rails -# # explicitly prevents eager loading when the environment task is invoked, -# # so we need to manually eager load the app here. -# Rails.application.eager_load! -# end -# -# Que.logger.level = Logger.const_get((ENV['QUE_LOG_LEVEL'] || 'INFO').upcase) -# Que.worker_count = 1 -# Que.wake_interval = (ENV['QUE_WAKE_INTERVAL'] || 1).to_f -# Que.mode = :async -# -# # When changing how signals are caught, be sure to test the behavior with -# # the rake task in tasks/safe_shutdown.rb. -# -# stop = false -# %w( INT ).each do |signal| -# trap(signal) { stop = true } -# end -# -# at_exit do -# $stdout.puts "Finishing Que's current jobs before exiting..." -# Que.worker_count = 0 -# Que.mode = :off -# $stdout.puts "Que's jobs finished, exiting..." -# end -# -# loop do -# sleep 1 -# break if stop -# end +#!/usr/bin/env ruby + +ENV["RAILS_ENV"] ||= "production" + +root = File.expand_path(File.dirname(__FILE__)) +root = File.dirname(root) until File.exist?(File.join(root, 'config')) +Dir.chdir(root) + +require File.join(root, "config", "environment") + +# from que gem rake task +if defined?(::Rails) && Rails.respond_to?(:application) + # ActiveSupport's dependency autoloading isn't threadsafe, and Que uses + # multiple threads, which means that eager loading is necessary. Rails + # explicitly prevents eager loading when the environment task is invoked, + # so we need to manually eager load the app here. + Rails.application.eager_load! +end + +Que.logger.level = Logger.const_get((ENV['QUE_LOG_LEVEL'] || 'INFO').upcase) +Que.worker_count = 1 +Que.wake_interval = (ENV['QUE_WAKE_INTERVAL'] || 1).to_f +Que.mode = :async + +# When changing how signals are caught, be sure to test the behavior with +# the rake task in tasks/safe_shutdown.rb. + +stop = false +%w( INT ).each do |signal| + trap(signal) { stop = true } +end + +at_exit do + $stdout.puts "Finishing Que's current jobs before exiting..." + Que.worker_count = 0 + Que.mode = :off + $stdout.puts "Que's jobs finished, exiting..." +end + +loop do + sleep 1 + break if stop +end diff --git a/lib/daemons/que_ctl b/lib/daemons/que_ctl index de27eb7f8..9a3da9cd1 100755 --- a/lib/daemons/que_ctl +++ b/lib/daemons/que_ctl @@ -1,6 +1,5 @@ -# #!/usr/bin/env ruby -# require 'rubygems' -# require 'daemons/rails/config' -# -# config = Daemons::Rails::Config.for_controller(File.expand_path(__FILE__)) -# Daemons::Rails.run config[:script], config.to_hash +#!/usr/bin/env ruby +require 'rubygems' +require 'daemons/rails/config' +config = Daemons::Rails::Config.for_controller(File.expand_path(__FILE__)) +Daemons::Rails.run config[:script], config.to_hash diff --git a/test/jobs/domain_delete_job_test.rb b/test/jobs/domain_delete_job_test.rb index a6f7d9065..76388f2c6 100644 --- a/test/jobs/domain_delete_job_test.rb +++ b/test/jobs/domain_delete_job_test.rb @@ -12,9 +12,9 @@ class DomainDeleteJobTest < ActiveSupport::TestCase dom = Domain.find_by(id: @domain.id) assert dom - DomainDeleteJob.run(@domain.id) + DomainDeleteJob.perform_now(@domain.id) dom = Domain.find_by(id: @domain.id) assert_nil dom end -end \ No newline at end of file +end diff --git a/test/jobs/domain_expire_email_job_test.rb b/test/jobs/domain_expire_email_job_test.rb index 0bde50b51..5d5d09e5f 100644 --- a/test/jobs/domain_expire_email_job_test.rb +++ b/test/jobs/domain_expire_email_job_test.rb @@ -9,18 +9,12 @@ class DomainExpireEmailJobTest < ActiveSupport::TestCase @email = @domain.registrant.email end - def test_domain_expire - success = DomainExpireEmailJob.run(@domain.id, @email) - assert success - end - def test_domain_expire_with_force_delete @domain.update(statuses: [DomainStatus::FORCE_DELETE]) @domain.reload assert_equal ['serverForceDelete'], @domain.statuses - success = DomainExpireEmailJob.run(@domain.id, @email) - assert success + DomainExpireEmailJob.perform_now(@domain.id, @email) statuses = @domain.statuses statuses.delete(DomainStatus::FORCE_DELETE) diff --git a/test/jobs/regenerate_registrar_whoises_job_test.rb b/test/jobs/regenerate_registrar_whoises_job_test.rb deleted file mode 100644 index 3fe94612b..000000000 --- a/test/jobs/regenerate_registrar_whoises_job_test.rb +++ /dev/null @@ -1,13 +0,0 @@ -require "test_helper" - -class RegenerateRegistrarWhoisesJobTest < ActiveSupport::TestCase - setup do - travel_to Time.zone.parse('2010-07-05 10:00') - @registrar = registrars(:bestnames) - end - - def test_job_return_true - # if return false, then job was failes - assert RegenerateRegistrarWhoisesJob.run(@registrar.id) - end -end \ No newline at end of file