purge cache pubsub implementation

This commit is contained in:
Kyle Drake 2014-08-10 00:55:13 -07:00
parent b786df44d1
commit 94b3fd6903
4 changed files with 39 additions and 0 deletions

7
app.rb
View file

@ -545,6 +545,9 @@ post '/change_name' do
redirect '/settings' redirect '/settings'
end end
old_host = current_site.host
old_file_paths = current_site.file_list.collect {|f| f.filename}
current_site.username = params[:name] current_site.username = params[:name]
if current_site.valid? if current_site.valid?
@ -553,6 +556,10 @@ post '/change_name' do
current_site.move_files_from old_username current_site.move_files_from old_username
} }
old_file_paths.each do |file_path|
PurgeCacheWorker.async_queue "#{old_host}/#{file_path}"
end
flash[:success] = "Site/user name has been changed. You will need to use this name to login, <b>don't forget it</b>." flash[:success] = "Site/user name has been changed. You will need to use this name to login, <b>don't forget it</b>."
redirect '/settings' redirect '/settings'
else else

View file

@ -50,6 +50,14 @@ Sidekiq.configure_client do |config|
config.redis = sidekiq_redis_config config.redis = sidekiq_redis_config
end end
if $config['pubsub_url']
$pubsub = Redis.new url: $config['pubsub_url']
end
if $config['pubsub_url'].nil? && ENV['RACK_ENV'] == 'production'
raise 'pubsub_url is missing from config'
end
require File.join(DIR_ROOT, 'workers', 'thumbnail_worker.rb') require File.join(DIR_ROOT, 'workers', 'thumbnail_worker.rb')
require File.join(DIR_ROOT, 'workers', 'screenshot_worker.rb') require File.join(DIR_ROOT, 'workers', 'screenshot_worker.rb')
require File.join(DIR_ROOT, 'workers', 'email_worker.rb') require File.join(DIR_ROOT, 'workers', 'email_worker.rb')

View file

@ -184,6 +184,7 @@ class Site < Sequel::Model
%w{index not_found}.each do |name| %w{index not_found}.each do |name|
File.write file_path("#{name}.html"), render_template("#{name}.erb") File.write file_path("#{name}.html"), render_template("#{name}.erb")
PurgeCacheWorker.perform_async "#{host}/#{name}.html"
ScreenshotWorker.perform_async values[:username], "#{name}.html" ScreenshotWorker.perform_async values[:username], "#{name}.html"
end end
@ -205,6 +206,10 @@ class Site < Sequel::Model
self.updated_at = Time.now self.updated_at = Time.now
save(validate: false) save(validate: false)
} }
site_files.file_list.collect {|f| f.filename}.each do |f|
PurgeCacheWorker.async_queue "#{host}/#{f}"
end
end end
=begin =begin
@ -279,6 +284,8 @@ class Site < Sequel::Model
FileUtils.mv uploaded.path, file_path(filename) FileUtils.mv uploaded.path, file_path(filename)
File.chmod(0640, file_path(filename)) File.chmod(0640, file_path(filename))
PurgeCacheWorker.perform_async "#{host}/#{filename}"
ext = File.extname(filename).gsub(/^./, '') ext = File.extname(filename).gsub(/^./, '')
if ext.match HTML_REGEX if ext.match HTML_REGEX
@ -324,6 +331,8 @@ class Site < Sequel::Model
rescue Errno::ENOENT rescue Errno::ENOENT
end end
PurgeCacheWorker.perform_async "#{host}/#{filename}"
ext = File.extname(filename).gsub(/^./, '') ext = File.extname(filename).gsub(/^./, '')
screenshots_delete(filename) if ext.match HTML_REGEX screenshots_delete(filename) if ext.match HTML_REGEX
@ -340,6 +349,7 @@ class Site < Sequel::Model
def install_new_html_file(name) def install_new_html_file(name)
File.write file_path(name), render_template('index.erb') File.write file_path(name), render_template('index.erb')
PurgeCacheWorker.perform_async "#{host}/#{name}"
end end
def file_exists?(filename) def file_exists?(filename)

View file

@ -0,0 +1,14 @@
class PurgeCacheWorker
include Sidekiq::Worker
sidekiq_options queue: :purgecache, retry: 10, backtrace: true
def perform(url)
begin
$pubsub.publish 'purge', url
rescue Redis::BaseConnectionError => error
puts "Pubsub error: #{error}, retrying in 1s"
sleep 1
retry
end
end
end