neocities/workers/purge_cache_worker.rb
Kyle Drake 7bd2ad6b51 New cache system using proxy_cache_bypass
Instead of using ngx_cache_purge which was buggy, we are trying
proxy_cache_bypass, which is internal to nginx. This is A Good Thing
(assuming it works), because when we call HEAD on the purge item, it
also warms the cache for us, which the previous system did not do. We
want newly updated files to cache warm, because they are expected to be
used quickly.
2015-07-27 15:44:34 -07:00

29 lines
770 B
Ruby

require 'open-uri'
class PurgeCacheWorker
HTTP_TIMEOUT = 5
include Sidekiq::Worker
sidekiq_options queue: :purgecache, retry: 1000, backtrace: false, average_scheduled_poll_interval: 1
sidekiq_retry_in do |count|
return 10 if count < 10
180
end
def perform(proxy_ip, username, path)
# Must always have a forward slash
path = '/' + path if path[0] != '/'
url = Addressable::URI.encode_component(
"http://#{proxy_ip}#{path}",
Addressable::URI::CharacterClasses::QUERY
)
begin
RestClient::Request.execute method: :head, url: url, timeout: HTTP_TIMEOUT, headers: {
host: URI::encode("#{username}.neocities.org"),
cache_purge: '1'
}
rescue RestClient::ResourceNotFound
end
end
end