From 7bd2ad6b51b9b6bd4ebefbbd6df57215d8c98212 Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Mon, 27 Jul 2015 15:44:34 -0700 Subject: [PATCH] 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. --- tests/workers/purge_cache_worker_tests.rb | 26 +++++++++++------------ workers/purge_cache_worker.rb | 7 +++--- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/tests/workers/purge_cache_worker_tests.rb b/tests/workers/purge_cache_worker_tests.rb index 90be0da8..b07bc3c7 100644 --- a/tests/workers/purge_cache_worker_tests.rb +++ b/tests/workers/purge_cache_worker_tests.rb @@ -6,8 +6,8 @@ describe PurgeCacheWorker do end it 'throws exception without 200 or 404 http status' do - stub_request(:get, "http://#{@test_ip}/:cache/purge/test.jpg"). - with(headers: {'Host' => 'kyledrake.neocities.org'}) + stub_request(:head, "http://#{@test_ip}/test.jpg"). + with(headers: {'Host' => 'kyledrake.neocities.org', 'Cache-Purge' => '1'}) .to_return(status: 503) worker = PurgeCacheWorker.new @@ -18,8 +18,8 @@ describe PurgeCacheWorker do end it 'handles 404 without exception' do - stub_request(:get, "http://#{@test_ip}/:cache/purge/test.jpg"). - with(headers: {'Host' => 'kyledrake.neocities.org'}) + stub_request(:head, "http://#{@test_ip}/test.jpg"). + with(headers: {'Host' => 'kyledrake.neocities.org', 'Cache-Purge' => '1'}) .to_return(status: 404) worker = PurgeCacheWorker.new @@ -27,35 +27,35 @@ describe PurgeCacheWorker do end it 'sends a purge request' do - stub_request(:get, "http://#{@test_ip}/:cache/purge/test.jpg"). - with(headers: {'Host' => 'kyledrake.neocities.org'}) + stub_request(:head, "http://#{@test_ip}/test.jpg"). + with(headers: {'Host' => 'kyledrake.neocities.org', 'Cache-Purge' => '1'}) .to_return(status: 200) worker = PurgeCacheWorker.new worker.perform @test_ip, 'kyledrake', '/test.jpg' - assert_requested :get, "http://#{@test_ip}/:cache/purge/test.jpg" + assert_requested :head, "http://#{@test_ip}/test.jpg" end it 'handles spaces correctly' do - stub_request(:get, "http://#{@test_ip}/:cache/purge/te st.jpg"). - with(headers: {'Host' => 'kyledrake.neocities.org'}) + stub_request(:head, "http://#{@test_ip}/te st.jpg"). + with(headers: {'Host' => 'kyledrake.neocities.org', 'Cache-Purge' => '1'}) .to_return(status: 200) url = Addressable::URI.encode_component( - "http://#{@test_ip}/:cache/purge/te st.jpg", + "http://#{@test_ip}/te st.jpg", Addressable::URI::CharacterClasses::QUERY ) worker = PurgeCacheWorker.new worker.perform @test_ip, 'kyledrake', '/te st.jpg' - assert_requested :get, url + assert_requested :head, url end it 'works without forward slash' do - stub_request(:get, "http://#{@test_ip}/:cache/purge/test.jpg"). - with(headers: {'Host' => 'kyledrake.neocities.org'}) + stub_request(:head, "http://#{@test_ip}/test.jpg"). + with(headers: {'Host' => 'kyledrake.neocities.org', 'Cache-Purge' => '1'}) .to_return(status: 200) worker = PurgeCacheWorker.new diff --git a/workers/purge_cache_worker.rb b/workers/purge_cache_worker.rb index eaf123c9..b29e310a 100644 --- a/workers/purge_cache_worker.rb +++ b/workers/purge_cache_worker.rb @@ -15,12 +15,13 @@ class PurgeCacheWorker path = '/' + path if path[0] != '/' url = Addressable::URI.encode_component( - "http://#{proxy_ip}/:cache/purge#{path}", + "http://#{proxy_ip}#{path}", Addressable::URI::CharacterClasses::QUERY ) begin - RestClient::Request.execute method: :get, url: url, timeout: HTTP_TIMEOUT, headers: { - host: URI::encode("#{username}.neocities.org") + RestClient::Request.execute method: :head, url: url, timeout: HTTP_TIMEOUT, headers: { + host: URI::encode("#{username}.neocities.org"), + cache_purge: '1' } rescue RestClient::ResourceNotFound end