mirror of
https://github.com/internetee/registry.git
synced 2025-05-16 09:27:19 +02:00
Basic delayed job implementation
This commit is contained in:
parent
6aa82dd222
commit
4cedb2cf78
12 changed files with 126 additions and 1 deletions
5
Gemfile
5
Gemfile
|
@ -74,6 +74,11 @@ gem 'rails-settings-cached', '0.4.1'
|
|||
gem 'net-ssh'
|
||||
gem 'net-scp'
|
||||
|
||||
# delayed job
|
||||
gem 'delayed_job_active_record', '~> 4.0.2'
|
||||
# to process delayed jobs
|
||||
gem 'daemons'
|
||||
|
||||
group :development, :test do
|
||||
gem 'capybara', '~> 2.4.1'
|
||||
# For feature testing
|
||||
|
|
|
@ -78,8 +78,14 @@ GEM
|
|||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.8.0)
|
||||
daemons (1.1.9)
|
||||
database_cleaner (1.3.0)
|
||||
debug_inspector (0.0.2)
|
||||
delayed_job (4.0.4)
|
||||
activesupport (>= 3.0, < 4.2)
|
||||
delayed_job_active_record (4.0.2)
|
||||
activerecord (>= 3.0, < 4.2)
|
||||
delayed_job (>= 3.0, < 4.1)
|
||||
descendants_tracker (0.0.4)
|
||||
thread_safe (~> 0.3, >= 0.3.1)
|
||||
devise (3.3.0)
|
||||
|
@ -362,7 +368,9 @@ DEPENDENCIES
|
|||
cancan (~> 1.6.10)
|
||||
capybara (~> 2.4.1)
|
||||
coffee-rails (~> 4.0.0)
|
||||
daemons
|
||||
database_cleaner (~> 1.3.0)
|
||||
delayed_job_active_record (~> 4.0.2)
|
||||
devise (~> 3.3.0)
|
||||
epp (~> 1.4.0)
|
||||
epp-xml (~> 0.7.0)
|
||||
|
|
30
app/models/concerns/domain_version_observer.rb
Normal file
30
app/models/concerns/domain_version_observer.rb
Normal file
|
@ -0,0 +1,30 @@
|
|||
module DomainVersionObserver
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
after_save :delayed_whois_update
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def delayed_whois_update
|
||||
name = domain_name
|
||||
return unless name
|
||||
body = snapshot
|
||||
delay.update_whois(name, body)
|
||||
end
|
||||
|
||||
# not sure we need to pass in the params since i don't know if delayed job has access to
|
||||
# all the regular attributes and stuff
|
||||
def update_whois(domain_name, body)
|
||||
wd = WhoisDomain.find_or_initialize_by(name: domain_name)
|
||||
wd.body = body
|
||||
wd.save!
|
||||
end
|
||||
|
||||
def domain_name
|
||||
name = reify.try(:name)
|
||||
name = load_snapshot[:domain][:name] if event == 'create'
|
||||
return name if name
|
||||
end
|
||||
end
|
|
@ -1,5 +1,6 @@
|
|||
class DomainVersion < PaperTrail::Version
|
||||
include UserEvents
|
||||
include DomainVersionObserver if Setting.whois_enabled # unless Setting.whois_enabled
|
||||
|
||||
scope :deleted, -> { where(event: 'destroy') }
|
||||
|
||||
|
|
3
app/models/whois_domain.rb
Normal file
3
app/models/whois_domain.rb
Normal file
|
@ -0,0 +1,3 @@
|
|||
class WhoisDomain < WhoisServer
|
||||
self.table_name = 'domains'
|
||||
end
|
4
app/models/whois_server.rb
Normal file
4
app/models/whois_server.rb
Normal file
|
@ -0,0 +1,4 @@
|
|||
class WhoisServer < ActiveRecord::Base
|
||||
self.abstract_class = true
|
||||
establish_connection :"#{Rails.env}_whois"
|
||||
end
|
5
bin/delayed_job
Executable file
5
bin/delayed_job
Executable file
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
|
||||
require 'delayed/command'
|
||||
Delayed::Command.new(ARGV).daemonize
|
|
@ -17,3 +17,9 @@ test:
|
|||
production:
|
||||
<<: *default
|
||||
database: registry_production
|
||||
|
||||
development_whois:
|
||||
database: whois_development
|
||||
|
||||
test_whois:
|
||||
database: test_whois
|
||||
|
|
22
db/migrate/20141111105931_create_delayed_jobs.rb
Normal file
22
db/migrate/20141111105931_create_delayed_jobs.rb
Normal file
|
@ -0,0 +1,22 @@
|
|||
class CreateDelayedJobs < ActiveRecord::Migration
|
||||
def self.up
|
||||
create_table :delayed_jobs, :force => true do |table|
|
||||
table.integer :priority, :default => 0, :null => false # Allows some jobs to jump to the front of the queue
|
||||
table.integer :attempts, :default => 0, :null => false # Provides for retries, but still fail eventually.
|
||||
table.text :handler, :null => false # YAML-encoded string of the object that will do work
|
||||
table.text :last_error # reason for last failure (See Note below)
|
||||
table.datetime :run_at # When to run. Could be Time.zone.now for immediately, or sometime in the future.
|
||||
table.datetime :locked_at # Set when a client is working on this object
|
||||
table.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead)
|
||||
table.string :locked_by # Who is working on this object (if locked)
|
||||
table.string :queue # The name of the queue this job is in
|
||||
table.timestamps
|
||||
end
|
||||
|
||||
add_index :delayed_jobs, [:priority, :run_at], :name => 'delayed_jobs_priority'
|
||||
end
|
||||
|
||||
def self.down
|
||||
drop_table :delayed_jobs
|
||||
end
|
||||
end
|
18
db/schema.rb
18
db/schema.rb
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20141105150721) do
|
||||
ActiveRecord::Schema.define(version: 20141111105931) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
@ -91,6 +91,22 @@ ActiveRecord::Schema.define(version: 20141105150721) do
|
|||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "delayed_jobs", force: true do |t|
|
||||
t.integer "priority", default: 0, null: false
|
||||
t.integer "attempts", default: 0, null: false
|
||||
t.text "handler", null: false
|
||||
t.text "last_error"
|
||||
t.datetime "run_at"
|
||||
t.datetime "locked_at"
|
||||
t.datetime "failed_at"
|
||||
t.string "locked_by"
|
||||
t.string "queue"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
add_index "delayed_jobs", ["priority", "run_at"], name: "delayed_jobs_priority", using: :btree
|
||||
|
||||
create_table "delegation_signers", force: true do |t|
|
||||
t.integer "domain_id"
|
||||
t.string "key_tag"
|
||||
|
|
|
@ -77,3 +77,5 @@ Setting.ns_min_count = 2
|
|||
Setting.ns_max_count = 11
|
||||
|
||||
Setting.transfer_wait_time = 0
|
||||
|
||||
Setting.whois_enabled = true
|
||||
|
|
23
doc/whois.rm
Normal file
23
doc/whois.rm
Normal file
|
@ -0,0 +1,23 @@
|
|||
Connection with whois
|
||||
------------------------------------
|
||||
|
||||
The easiest way to get started without whois is to change Settings.whois_enabled to false. But like expected,
|
||||
that disables whois (effects should fully be loaded after restarting the app)
|
||||
What whois_enabled=false does is that the whois callback does not get included.
|
||||
Delayed jobs migration and everything else will still be installed tho.
|
||||
|
||||
If you wish to use the whois module, tho, you need a whois database looking something like this
|
||||
|
||||
```ruby
|
||||
create_table :domains do |t|
|
||||
t.string :name
|
||||
t.text :body
|
||||
t.timestamps
|
||||
end
|
||||
```
|
||||
|
||||
NB! Migration with rake tasks is available in whois app repo.
|
||||
|
||||
For development, delayed_job queue can be handled by rake task
|
||||
`rake jobs:work` or if you wish to be fancy you can use a daemon with `bin/delayed_job start`
|
||||
``
|
Loading…
Add table
Add a link
Reference in a new issue