Remove delayed_job (#6071) [deploy]

* Update adapter to sidekiq

* Remove delayed_jobs routes

* Remove delayd_jobs initializer and references

* Remove delayed_job_spec

* Remove bin/delayed_job

* Remove app/jobs/

* Migration to drop delayed_jobs table

* Remove delayed_job_web & delayed_job_active_record

* Update docs

* Remove reference to delayed_job dashboard

* Remove delayed_job settings from initializers

* Add delayed_job_admin back to reserved words list
This commit is contained in:
Alex 2020-02-14 10:00:27 -08:00 committed by GitHub
parent 65eba740ab
commit b81c2e8df3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 22 additions and 131 deletions

View file

@ -29,8 +29,6 @@ gem "cld", "~> 0.8" # Compact Language Detection for Ruby
gem "cloudinary", "~> 1.13" # Client library for easily using the Cloudinary service
gem "counter_culture", "~> 2.2" # counter_culture provides turbo-charged counter caches that are kept up-to-date
gem "ddtrace", "~> 0.32.0" # ddtrace is Datadogs tracing client for Ruby.
gem "delayed_job_active_record", "~> 4.1" # ActiveRecord backend for Delayed::Job
gem "delayed_job_web", "~> 1.4" # Web interface for delayed_job
gem "devise", "~> 4.7" # Flexible authentication solution for Rails
gem "dogstatsd-ruby", "~> 4.6" # A client for DogStatsD, an extension of the StatsD metric server for Datadog
gem "doorkeeper", "~> 5.3" # Oauth 2 provider

View file

@ -209,16 +209,6 @@ GEM
debug_inspector (0.0.3)
declarative (0.0.10)
declarative-option (0.1.0)
delayed_job (4.1.8)
activesupport (>= 3.0, < 6.1)
delayed_job_active_record (4.1.4)
activerecord (>= 3.0, < 6.1)
delayed_job (>= 3.0, < 5)
delayed_job_web (1.4.3)
activerecord (> 3.0.0)
delayed_job (> 2.0.3)
rack-protection (>= 1.5.5)
sinatra (>= 1.4.4)
derailed_benchmarks (1.6.0)
benchmark-ips (~> 2)
get_process_mem (~> 0)
@ -490,7 +480,6 @@ GEM
multi_json (1.14.1)
multi_xml (0.6.0)
multipart-post (2.1.1)
mustermann (1.0.3)
nakayoshi_fork (0.0.4)
naught (1.1.0)
nenv (0.3.0)
@ -748,11 +737,6 @@ GEM
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.2)
sinatra (2.0.5)
mustermann (~> 1.0)
rack (~> 2.0)
rack-protection (= 2.0.5)
tilt (~> 2.0)
sitemap_generator (6.1.0)
builder (~> 3.0)
slack-notifier (2.3.2)
@ -896,8 +880,6 @@ DEPENDENCIES
cloudinary (~> 1.13)
counter_culture (~> 2.2)
ddtrace (~> 0.32.0)
delayed_job_active_record (~> 4.1)
delayed_job_web (~> 1.4)
derailed_benchmarks (~> 1.6)
devise (~> 4.7)
dogstatsd-ruby (~> 4.6)

View file

@ -1,7 +0,0 @@
class ApplicationJob < ActiveJob::Base
# Automatically retry jobs that encountered a deadlock
# retry_on ActiveRecord::Deadlocked
# Most jobs are safe to ignore if the underlying records are no longer available
# discard_on ActiveJob::DeserializationError
end

View file

@ -102,7 +102,6 @@
!url.href.includes('/internal') && // Don't fetch for internal dashboard.
!url.href.includes('/future') && // Skip for /future.
!url.href.includes('?preview=') && // Skip for preview pages.
!url.href.includes('/delayed_job') && // Skip for Delayed Job dashboard
!url.href.includes('/sidekiq') && // Skip for Sidekiq dashboard
!url.href.includes('/oauth/') && // Skip oauth apps
!url.href.includes('/robots.txt') && // Skip robots for web crawlers

View file

@ -1,5 +0,0 @@
#!/usr/bin/env ruby
require File.expand_path(File.join(File.dirname(__FILE__), "..", "config", "environment"))
require "delayed/command"
Delayed::Command.new(ARGV).daemonize

View file

@ -6,7 +6,6 @@ Datadog.configure do |c|
c.tracer enabled: Rails.env.production?
c.tracer partial_flush: true
c.tracer priority_sampling: true
c.use :delayed_job
c.use :sidekiq
c.use :redis
c.use :rails

View file

@ -1,6 +0,0 @@
Delayed::Worker.destroy_failed_jobs = !Rails.env.development?
Delayed::Worker.sleep_delay = 60
Delayed::Worker.max_attempts = 10
Delayed::Worker.max_run_time = 30.minutes
Delayed::Worker.read_ahead = 5
# Delayed::Worker.delay_jobs = !Rails.env.test?

View file

@ -21,7 +21,6 @@ Honeybadger.configure do |config|
ActiveRecord::QueryCanceled,
]
config.request.filter_keys += %w[authorization]
config.delayed_job.attempt_threshold = 10
config.sidekiq.attempt_threshold = 10
config.breadcrumbs.enabled = true

View file

@ -12,8 +12,6 @@ Rails.application.routes.draw do
require "sidekiq/web"
authenticated :user, ->(user) { user.tech_admin? } do
mount DelayedJobWeb, at: "/delayed_job"
Sidekiq::Web.set :session_secret, Rails.application.secrets[:secret_key_base]
Sidekiq::Web.set :sessions, Rails.application.config.session_options
Sidekiq::Web.class_eval do

View file

@ -0,0 +1,16 @@
class DropDelayedJobTable < ActiveRecord::Migration[5.2]
def change
drop_table :delayed_jobs, force: true do |t|
t.integer :priority, default: 0, null: false # Allows some jobs to jump to the front of the queue
t.integer :attempts, default: 0, null: false # Provides for retries, but still fail eventually.
t.text :handler, null: false # YAML-encoded string of the object that will do work
t.text :last_error # reason for last failure (See Note below)
t.datetime :run_at # When to run. Could be Time.zone.now for immediately, or sometime in the future.
t.datetime :locked_at # Set when a client is working on this object
t.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead)
t.string :locked_by # Who is working on this object (if locked)
t.string :queue # The name of the queue this job is in
t.timestamps null: true
end
end
end

View file

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2020_02_11_192415) do
ActiveRecord::Schema.define(version: 2020_02_13_182938) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -359,21 +359,6 @@ ActiveRecord::Schema.define(version: 2020_02_11_192415) do
t.datetime "updated_at", null: false
end
create_table "delayed_jobs", id: :serial, force: :cascade do |t|
t.integer "attempts", default: 0, null: false
t.datetime "created_at"
t.datetime "failed_at"
t.text "handler", null: false
t.text "last_error"
t.datetime "locked_at"
t.string "locked_by"
t.integer "priority", default: 0, null: false
t.string "queue"
t.datetime "run_at"
t.datetime "updated_at"
t.index ["priority", "run_at"], name: "delayed_jobs_priority"
end
create_table "display_ad_events", force: :cascade do |t|
t.string "category"
t.bigint "context_id"

View file

@ -7,7 +7,7 @@ title: Starting the Application
We're a Rails app, and we use [Webpacker][webpacker] to manage some of our
JavaScript.
Start the application, Webpack, and our job runner [delayed_job][delayed_job] by
Start the application, Webpack, and our job runner [Sidekiq][sidekiq] by
running:
```shell
@ -40,5 +40,5 @@ instance/tab of your shell.
Current gotchas: potential environment issues with external services need to be
worked out.
[delayed_job]: https://github.com/collectiveidea/delayed_job_active_record
[sidekiq]: https://github.com/mperham/sidekiq
[webpacker]: https://github.com/rails/webpacker

View file

@ -14,10 +14,9 @@ For the Dev.to tech stack we use:
- [_Cloudinary_](https://cloudinary.com/) for image manipulation/serving
- [_Honeybadger_](https://www.honeybadger.io/) for error monitoring
- [_Timber_](https://timber.io/) for logging
- [_Delayed Job_](https://github.com/collectiveidea/delayed_job) and
- [_Sidekiq_](https://github.com/mperham/sidekiq) (will be replacing delayed
job) and [_Active Job_](https://guides.rubyonrails.org/active_job_basics.html)
for background workers
- [_Sidekiq_](https://github.com/mperham/sidekiq) and
[_Active Job_](https://guides.rubyonrails.org/active_job_basics.html) for
background workers
- [_Algolia_](https://www.algolia.com/) for search
- [Ransack](https://github.com/activerecord-hackery/ransack) for internal search
- [_Redcarpet_](https://github.com/vmg/redcarpet) and

View file

@ -1,59 +0,0 @@
require "rails_helper"
RSpec.describe "Delayed Job web interface", type: :request do
let(:user) { create(:user) }
let(:super_admin) { create(:user, :super_admin) }
let(:article) { create(:article, user_id: user.id) }
let(:tech_admin) do
user = create(:user)
user.add_role :tech_admin
user
end
describe "GET /delayed_job" do
context "when not logged in" do
it "raises 404" do
expect do
get "/delayed_job"
end.to raise_error(ActiveRecord::RecordNotFound)
end
end
context "when logged in" do
it "raises 404" do
sign_in user
expect do
get "/delayed_job"
end.to raise_error(ActiveRecord::RecordNotFound)
end
end
context "when logged in as a super admin" do
before { sign_in super_admin }
it "redirects to overview" do
get "/delayed_job"
expect(response).to redirect_to("/delayed_job/overview")
end
it "renders overview" do
get "/delayed_job/overview"
expect(response.body).to include "Overview"
end
end
context "when logged in as a tech support member" do
before { sign_in tech_admin }
it "redirects to overview" do
get "/delayed_job"
expect(response).to redirect_to("/delayed_job/overview")
end
it "renders overview" do
get "/delayed_job/overview"
expect(response.body).to include "Overview"
end
end
end
end

View file

@ -13,7 +13,6 @@ RSpec.describe "Internal::Users", type: :request do
before do
sign_in super_admin
Delayed::Worker.new(quiet: true).work_off
dependents_for_offending_user_article
offender_activity_on_other_content
end
@ -32,7 +31,6 @@ RSpec.describe "Internal::Users", type: :request do
perform_enqueued_jobs do
Mention.create_all(comment2)
end
Delayed::Worker.new(quiet: true).work_off
end
def offender_activity_on_other_content
@ -42,7 +40,6 @@ RSpec.describe "Internal::Users", type: :request do
comment = create(:comment, commentable_type: "Article", commentable: article2, user: user)
# user3 reacts to offender comment
create(:reaction, reactable: comment, reactable_type: "Comment", user: user3)
Delayed::Worker.new(quiet: true).work_off
end
def full_profile
@ -62,13 +59,11 @@ RSpec.describe "Internal::Users", type: :request do
url: Faker::Internet.url
}
GithubRepo.create(params)
Delayed::Worker.new(quiet: true).work_off
end
def call_ghost
ghost
post "/internal/users/#{user.id}/full_delete", params: { user: { ghostify: "true" } }
Delayed::Worker.new(quiet: true).work_off
end
context "when merging users" do
@ -187,7 +182,6 @@ RSpec.describe "Internal::Users", type: :request do
create_mutual_follows
create_mention
create(:badge_achievement, rewarder_id: 1, rewarding_context_message: "yay", user_id: user.id)
Delayed::Worker.new(quiet: true).work_off
end
it "raises a 'record not found' error after deletion" do
@ -206,7 +200,6 @@ RSpec.describe "Internal::Users", type: :request do
context "when banishing user" do
def banish_user
post "/internal/users/#{user.id}/banish"
Delayed::Worker.new(quiet: true).work_off
user.reload
end