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:
parent
65eba740ab
commit
b81c2e8df3
15 changed files with 22 additions and 131 deletions
2
Gemfile
2
Gemfile
|
|
@ -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 Datadog’s 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
|
||||
|
|
|
|||
18
Gemfile.lock
18
Gemfile.lock
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
16
db/migrate/20200213182938_drop_delayed_job_table.rb
Normal file
16
db/migrate/20200213182938_drop_delayed_job_table.rb
Normal 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
|
||||
17
db/schema.rb
17
db/schema.rb
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue