This commit is contained in:
Toks
2013-08-02 10:48:48 -04:00
9 changed files with 51 additions and 55 deletions

View File

@@ -20,7 +20,8 @@ end
gem "rails", "3.2.12" gem "rails", "3.2.12"
gem "pg", "0.12.2" gem "pg", "0.12.2"
gem "memcache-client", :require => "memcache" gem "kgio"
gem "dalli"
gem "delayed_job" gem "delayed_job"
gem "delayed_job_active_record" gem "delayed_job_active_record"
gem "simple_form" gem "simple_form"

View File

@@ -82,6 +82,7 @@ GEM
coderay (1.0.9) coderay (1.0.9)
crack (0.3.2) crack (0.3.2)
daemons (1.1.9) daemons (1.1.9)
dalli (2.6.4)
delayed_job (3.0.5) delayed_job (3.0.5)
activesupport (~> 3.0) activesupport (~> 3.0)
delayed_job_active_record (0.4.4) delayed_job_active_record (0.4.4)
@@ -106,7 +107,6 @@ GEM
i18n (>= 0.4.0) i18n (>= 0.4.0)
mime-types (~> 1.16) mime-types (~> 1.16)
treetop (~> 1.4.8) treetop (~> 1.4.8)
memcache-client (1.8.5)
metaclass (0.0.1) metaclass (0.0.1)
method_source (0.8.1) method_source (0.8.1)
mime-types (1.22) mime-types (1.22)
@@ -226,13 +226,14 @@ DEPENDENCIES
bcrypt-ruby bcrypt-ruby
capistrano-unicorn capistrano-unicorn
daemons daemons
dalli
delayed_job delayed_job
delayed_job_active_record delayed_job_active_record
diff-lcs diff-lcs
factory_girl factory_girl
ffaker! ffaker!
kgio
mechanize! mechanize!
memcache-client
mocha mocha
net-sftp net-sftp
net-ssh net-ssh

View File

@@ -32,53 +32,44 @@ class Cache
end end
def self.get(key, expiry = 0) def self.get(key, expiry = 0)
begin start_time = Time.now
start_time = Time.now value = MEMCACHE.get key
value = MEMCACHE.get key.slice(0, 200) elapsed = Time.now - start_time
elapsed = Time.now - start_time ActiveRecord::Base.logger.debug('MemCache Get (%0.6f) %s -> %s' % [elapsed, key, value])
ActiveRecord::Base.logger.debug('MemCache Get (%0.6f) %s -> %s' % [elapsed, key, value]) if value.nil? and block_given? then
if value.nil? and block_given? then value = yield
value = yield MEMCACHE.set key, value, expiry
MEMCACHE.set key, value, expiry
end
value
rescue MemCache::MemCacheError => err
ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}"
if block_given? then
value = yield
put key, value, expiry
end
value
end end
value
rescue => err
ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}"
if block_given? then
value = yield
put key, value, expiry
end
value
end end
def self.put(key, value, expiry = 0) def self.put(key, value, expiry = 0)
key.gsub!(/\s/, "_") start_time = Time.now
key = key[0, 200] MEMCACHE.set key, value, expiry
elapsed = Time.now - start_time
begin ActiveRecord::Base.logger.debug('MemCache Set (%0.6f) %s -> %s' % [elapsed, key, value])
start_time = Time.now value
MEMCACHE.set key, value, expiry rescue => err
elapsed = Time.now - start_time ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}"
ActiveRecord::Base.logger.debug('MemCache Set (%0.6f) %s -> %s' % [elapsed, key, value]) nil
value
rescue MemCache::MemCacheError => err
ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}"
nil
end
end end
def self.delete(key, delay = nil) def self.delete(key, delay = nil)
begin start_time = Time.now
start_time = Time.now MEMCACHE.delete key, delay
MEMCACHE.delete key, delay elapsed = Time.now - start_time
elapsed = Time.now - start_time ActiveRecord::Base.logger.debug('MemCache Delete (%0.6f) %s' % [elapsed, key])
ActiveRecord::Base.logger.debug('MemCache Delete (%0.6f) %s' % [elapsed, key]) nil
nil rescue => err
rescue MemCache::MemCacheError => err ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}"
ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}" nil
nil
end
end end
def self.sanitize(key) def self.sanitize(key)

View File

@@ -235,7 +235,7 @@ class PostPresenter < Presenter
if pool.neighbors(@post).next if pool.neighbors(@post).next
@next_post_in_pool = pool.neighbors(@post).next @next_post_in_pool = pool.neighbors(@post).next
pool_html << template.link_to("next&thinsp;&rsaquo;".html_safe, template.post_path(pool.neighbors(@post).next, :pool_id => pool.id), :rel => next_rel, :class => "#{klass} next", :title => "to page #{pool.page_number(pool.neighbors(@post).next)}") pool_html << template.link_to("next&thinsp;&rsaquo;".html_safe, template.post_path(@next_post_in_pool, :pool_id => pool.id), :rel => next_rel, :class => "#{klass} next", :title => "to page #{pool.page_number(@next_post_in_pool)}")
match_found = true match_found = true
else else
pool_html << '<span class="next">next&thinsp;&rsaquo;</span>' pool_html << '<span class="next">next&thinsp;&rsaquo;</span>'

View File

@@ -108,14 +108,14 @@
<meta name="post-is-flagged" content="<%= @post.is_flagged? %>"> <meta name="post-is-flagged" content="<%= @post.is_flagged? %>">
<meta name="config-large-width" content="<%= Danbooru.config.large_image_width %>"> <meta name="config-large-width" content="<%= Danbooru.config.large_image_width %>">
<meta name="always-resize-images" content="<%= CurrentUser.user.always_resize_images? %>"> <meta name="always-resize-images" content="<%= CurrentUser.user.always_resize_images? %>">
<meta property="og:title" content="<%= h @post.presenter.humanized_essential_tag_string %> - <%= Danbooru.config.app_name %>"> <meta property="og:title" content="<%= @post.presenter.humanized_essential_tag_string %> - <%= Danbooru.config.app_name %>">
<meta property="og:description" content="<%= h @post.presenter.humanized_tag_string %>"> <meta property="og:description" content="<%= @post.presenter.humanized_tag_string %>">
<meta property="og:image" content="<%= @post.preview_file_url %>"> <meta property="og:image" content="<%= @post.preview_file_url %>">
<!-- Twitter properties --> <!-- Twitter properties -->
<% if @post.twitter_card_supported? %> <% if @post.twitter_card_supported? %>
<meta name="twitter:card" content="photo"> <meta name="twitter:card" content="photo">
<meta name="twitter:image:src" content="http://<%= Danbooru.config.hostname %><%= @post.file_url %>"> <meta name="twitter:image:src" content="http://<%= Danbooru.config.hostname %><%= @post.large_file_url %>">
<meta name="twitter:image:width" content="<%= @post.image_width %>"> <meta name="twitter:image:width" content="<%= @post.image_width %>">
<meta name="twitter:image:height" content="<%= @post.image_height %>"> <meta name="twitter:image:height" content="<%= @post.image_height %>">
<% end %> <% end %>

View File

@@ -4,7 +4,7 @@ module Danbooru
class Configuration class Configuration
# The version of this Danbooru. # The version of this Danbooru.
def version def version
"2.27.0" "2.28.0"
end end
# The name of this Danbooru. # The name of this Danbooru.

View File

@@ -40,7 +40,7 @@ Danbooru::Application.configure do
# config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
# Use a different cache store in production # Use a different cache store in production
# config.cache_store = :mem_cache_store # config.cache_store = :dalli_store, Danbooru.config.memcached_servers
# Enable serving of images, stylesheets, and JavaScripts from an asset server # Enable serving of images, stylesheets, and JavaScripts from an asset server
# config.action_controller.asset_host = "http://assets.example.com" # config.action_controller.asset_host = "http://assets.example.com"

View File

@@ -1,6 +0,0 @@
require 'memcache'
unless defined?(MEMCACHE)
MEMCACHE = MemCache.new :c_threshold => 10_000, :compression => true, :debug => false, :namespace => Danbooru.config.app_name.gsub(/[^A-Za-z0-9]/, "_"), :readonly => false, :urlencode => false
MEMCACHE.servers = Danbooru.config.memcached_servers
end

View File

@@ -0,0 +1,9 @@
unless defined?(MEMCACHE)
MEMCACHE = Dalli::Client.new(Danbooru.config.memcached_servers, :namespace => Danbooru.config.app_name.gsub(/[^A-Za-z0-9]/, "_"))
end
if Rails.env.production?
Danbooru::Application.configure do
config.cache_store = :dalli_store, Danbooru.config.memcached_servers
end
end