mirror of
https://github.com/neocities/neocities.git
synced 2025-04-28 11:12:30 +02:00
better structure for cache purge
This commit is contained in:
parent
be128608b9
commit
63d9348012
3 changed files with 23 additions and 9 deletions
2
app.rb
2
app.rb
|
@ -557,7 +557,7 @@ post '/change_name' do
|
||||||
}
|
}
|
||||||
|
|
||||||
old_file_paths.each do |file_path|
|
old_file_paths.each do |file_path|
|
||||||
PurgeCacheWorker.async_queue "#{old_host}/#{file_path}"
|
current_site.purge_cache file_path
|
||||||
end
|
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>."
|
||||||
|
|
|
@ -196,7 +196,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"
|
purge_cache "#{name}.html"
|
||||||
ScreenshotWorker.perform_async values[:username], "#{name}.html"
|
ScreenshotWorker.perform_async values[:username], "#{name}.html"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -220,7 +220,7 @@ class Site < Sequel::Model
|
||||||
}
|
}
|
||||||
|
|
||||||
site_files.file_list.collect {|f| f.filename}.each do |f|
|
site_files.file_list.collect {|f| f.filename}.each do |f|
|
||||||
PurgeCacheWorker.async_queue "#{host}/#{f}"
|
purge_cache f
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -298,6 +298,12 @@ class Site < Sequel::Model
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def purge_cache(filename)
|
||||||
|
payload = {site: username, path: filename}
|
||||||
|
payload[:domain] = domain if !domain.empty?
|
||||||
|
PurgeCacheWorker.perform_async payload
|
||||||
|
end
|
||||||
|
|
||||||
def store_file(filename, uploaded)
|
def store_file(filename, uploaded)
|
||||||
if File.exist?(file_path(filename)) &&
|
if File.exist?(file_path(filename)) &&
|
||||||
Digest::SHA2.file(file_path(filename)).digest == Digest::SHA2.file(uploaded.path).digest
|
Digest::SHA2.file(file_path(filename)).digest == Digest::SHA2.file(uploaded.path).digest
|
||||||
|
@ -316,7 +322,7 @@ 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}"
|
purge_cache filename
|
||||||
|
|
||||||
ext = File.extname(filename).gsub(/^./, '')
|
ext = File.extname(filename).gsub(/^./, '')
|
||||||
|
|
||||||
|
@ -363,7 +369,7 @@ class Site < Sequel::Model
|
||||||
rescue Errno::ENOENT
|
rescue Errno::ENOENT
|
||||||
end
|
end
|
||||||
|
|
||||||
PurgeCacheWorker.perform_async "#{host}/#{filename}"
|
purge_cache filename
|
||||||
|
|
||||||
ext = File.extname(filename).gsub(/^./, '')
|
ext = File.extname(filename).gsub(/^./, '')
|
||||||
|
|
||||||
|
@ -381,7 +387,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}"
|
purge_cache name
|
||||||
end
|
end
|
||||||
|
|
||||||
def file_exists?(filename)
|
def file_exists?(filename)
|
||||||
|
@ -462,6 +468,11 @@ class Site < Sequel::Model
|
||||||
end
|
end
|
||||||
|
|
||||||
if !values[:domain].nil? && !values[:domain].empty?
|
if !values[:domain].nil? && !values[:domain].empty?
|
||||||
|
|
||||||
|
if values[:domain] =~ /neocities\.org/ || values[:domain] =~ /neocitiesops\.net/
|
||||||
|
errors.add :domain, "Domain is already being used.. by Neocities."
|
||||||
|
end
|
||||||
|
|
||||||
if !(values[:domain] =~ /^[a-zA-Z0-9.-]+\.[a-zA-Z0-9]+$/i) || values[:domain].length > 90
|
if !(values[:domain] =~ /^[a-zA-Z0-9.-]+\.[a-zA-Z0-9]+$/i) || values[:domain].length > 90
|
||||||
errors.add :domain, "Domain provided is not valid. Must take the form of domain.com"
|
errors.add :domain, "Domain provided is not valid. Must take the form of domain.com"
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,11 +2,14 @@ class PurgeCacheWorker
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
sidekiq_options queue: :purgecache, retry: 10, backtrace: true
|
sidekiq_options queue: :purgecache, retry: 10, backtrace: true
|
||||||
|
|
||||||
def perform(url)
|
def perform(payload)
|
||||||
|
attempt = 0
|
||||||
begin
|
begin
|
||||||
$pubsub.publish 'purgecache', url
|
attempt += 1
|
||||||
|
$pubsub.publish 'purgecache', payload.to_json
|
||||||
rescue Redis::BaseConnectionError => error
|
rescue Redis::BaseConnectionError => error
|
||||||
puts "Pubsub error: #{error}, retrying in 1s"
|
raise if attempt > 3
|
||||||
|
puts "pubsub error: #{error}, retrying in 1s"
|
||||||
sleep 1
|
sleep 1
|
||||||
retry
|
retry
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue