From 4884f7edf0896c2806b28c04b172e27a6d278b67 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 1 Aug 2013 13:23:35 -0700 Subject: [PATCH 1/6] fix double escaping of essential tag string meta tag --- app/views/posts/show.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/posts/show.html.erb b/app/views/posts/show.html.erb index 440d4d8b2..2588779e2 100644 --- a/app/views/posts/show.html.erb +++ b/app/views/posts/show.html.erb @@ -105,7 +105,7 @@ - + From a25092c8b863b46265fc0366ef356c2df86422e2 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 1 Aug 2013 13:23:45 -0700 Subject: [PATCH 2/6] fix double escaping of essential tag string meta tag --- app/views/posts/show.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/posts/show.html.erb b/app/views/posts/show.html.erb index 2588779e2..fb104ee36 100644 --- a/app/views/posts/show.html.erb +++ b/app/views/posts/show.html.erb @@ -106,7 +106,7 @@ - + From fa1b65a85997347935987621562bce0ddcd0dc87 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 1 Aug 2013 13:27:29 -0700 Subject: [PATCH 3/6] point twitter card image to large file if it exists --- app/views/posts/show.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/posts/show.html.erb b/app/views/posts/show.html.erb index fb104ee36..71c2969af 100644 --- a/app/views/posts/show.html.erb +++ b/app/views/posts/show.html.erb @@ -112,7 +112,7 @@ <% if @post.twitter_card_supported? %> - + <% end %> From 60b214f4d0621a645377fa7a325853d1550b1974 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 1 Aug 2013 15:02:45 -0700 Subject: [PATCH 4/6] switch to dalli for memcache adapter, related to #1906 --- Gemfile | 3 +- Gemfile.lock | 5 ++- app/logical/cache.rb | 71 ++++++++++++++----------------- app/presenters/post_presenter.rb | 2 +- config/environments/production.rb | 2 +- config/initializers/memcache.rb | 6 --- config/initializers/z_dalli.rb | 3 ++ 7 files changed, 41 insertions(+), 51 deletions(-) delete mode 100644 config/initializers/memcache.rb create mode 100644 config/initializers/z_dalli.rb diff --git a/Gemfile b/Gemfile index f0ead81d6..68b608248 100644 --- a/Gemfile +++ b/Gemfile @@ -20,7 +20,8 @@ end gem "rails", "3.2.12" gem "pg", "0.12.2" -gem "memcache-client", :require => "memcache" +gem "kgio" +gem "dalli" gem "delayed_job" gem "delayed_job_active_record" gem "simple_form" diff --git a/Gemfile.lock b/Gemfile.lock index c43e7201b..e4aceb911 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -82,6 +82,7 @@ GEM coderay (1.0.9) crack (0.3.2) daemons (1.1.9) + dalli (2.6.4) delayed_job (3.0.5) activesupport (~> 3.0) delayed_job_active_record (0.4.4) @@ -106,7 +107,6 @@ GEM i18n (>= 0.4.0) mime-types (~> 1.16) treetop (~> 1.4.8) - memcache-client (1.8.5) metaclass (0.0.1) method_source (0.8.1) mime-types (1.22) @@ -226,13 +226,14 @@ DEPENDENCIES bcrypt-ruby capistrano-unicorn daemons + dalli delayed_job delayed_job_active_record diff-lcs factory_girl ffaker! + kgio mechanize! - memcache-client mocha net-sftp net-ssh diff --git a/app/logical/cache.rb b/app/logical/cache.rb index 705b7f685..a5d65a6c2 100644 --- a/app/logical/cache.rb +++ b/app/logical/cache.rb @@ -32,53 +32,44 @@ class Cache end def self.get(key, expiry = 0) - begin - start_time = Time.now - value = MEMCACHE.get key.slice(0, 200) - elapsed = Time.now - start_time - ActiveRecord::Base.logger.debug('MemCache Get (%0.6f) %s -> %s' % [elapsed, key, value]) - if value.nil? and block_given? then - value = yield - 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 + start_time = Time.now + value = MEMCACHE.get key + elapsed = Time.now - start_time + ActiveRecord::Base.logger.debug('MemCache Get (%0.6f) %s -> %s' % [elapsed, key, value]) + if value.nil? and block_given? then + value = yield + MEMCACHE.set key, value, expiry 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 def self.put(key, value, expiry = 0) - key.gsub!(/\s/, "_") - key = key[0, 200] - - begin - start_time = Time.now - MEMCACHE.set key, value, expiry - elapsed = Time.now - start_time - ActiveRecord::Base.logger.debug('MemCache Set (%0.6f) %s -> %s' % [elapsed, key, value]) - value - rescue MemCache::MemCacheError => err - ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}" - nil - end + start_time = Time.now + MEMCACHE.set key, value, expiry + elapsed = Time.now - start_time + ActiveRecord::Base.logger.debug('MemCache Set (%0.6f) %s -> %s' % [elapsed, key, value]) + value + rescue => err + ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}" + nil end def self.delete(key, delay = nil) - begin - start_time = Time.now - MEMCACHE.delete key, delay - elapsed = Time.now - start_time - ActiveRecord::Base.logger.debug('MemCache Delete (%0.6f) %s' % [elapsed, key]) - nil - rescue MemCache::MemCacheError => err - ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}" - nil - end + start_time = Time.now + MEMCACHE.delete key, delay + elapsed = Time.now - start_time + ActiveRecord::Base.logger.debug('MemCache Delete (%0.6f) %s' % [elapsed, key]) + nil + rescue => err + ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}" + nil end def self.sanitize(key) diff --git a/app/presenters/post_presenter.rb b/app/presenters/post_presenter.rb index 88b5dcd4f..d37031ba0 100644 --- a/app/presenters/post_presenter.rb +++ b/app/presenters/post_presenter.rb @@ -235,7 +235,7 @@ class PostPresenter < Presenter if pool.neighbors(@post).next @next_post_in_pool = pool.neighbors(@post).next - pool_html << template.link_to("next ›".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 ›".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 else pool_html << 'next ›' diff --git a/config/environments/production.rb b/config/environments/production.rb index 7948739ab..b43b98c66 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -40,7 +40,7 @@ Danbooru::Application.configure do # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) # 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 # config.action_controller.asset_host = "http://assets.example.com" diff --git a/config/initializers/memcache.rb b/config/initializers/memcache.rb deleted file mode 100644 index e91e9b097..000000000 --- a/config/initializers/memcache.rb +++ /dev/null @@ -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 diff --git a/config/initializers/z_dalli.rb b/config/initializers/z_dalli.rb new file mode 100644 index 000000000..8f3152cd6 --- /dev/null +++ b/config/initializers/z_dalli.rb @@ -0,0 +1,3 @@ +unless defined?(MEMCACHE) + MEMCACHE = Dalli::Client.new(Danbooru.config.memcached_servers, :namespace => Danbooru.config.app_name.gsub(/[^A-Za-z0-9]/, "_")) +end From e3ad8d93d47816426042089f26867185c7014605 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 1 Aug 2013 15:06:56 -0700 Subject: [PATCH 5/6] fix for production config --- config/environments/production.rb | 2 +- config/initializers/z_dalli.rb | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/config/environments/production.rb b/config/environments/production.rb index b43b98c66..2f6eb96a5 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -40,7 +40,7 @@ Danbooru::Application.configure do # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) # Use a different cache store in production - config.cache_store = :dalli_store, Danbooru.config.memcached_servers + # config.cache_store = :dalli_store, Danbooru.config.memcached_servers # Enable serving of images, stylesheets, and JavaScripts from an asset server # config.action_controller.asset_host = "http://assets.example.com" diff --git a/config/initializers/z_dalli.rb b/config/initializers/z_dalli.rb index 8f3152cd6..5ccaf4cdc 100644 --- a/config/initializers/z_dalli.rb +++ b/config/initializers/z_dalli.rb @@ -1,3 +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 From 48f3a99e504eeff8c1fbd63a37738040b51d3065 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 1 Aug 2013 15:14:34 -0700 Subject: [PATCH 6/6] increment version --- config/danbooru_default_config.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/danbooru_default_config.rb b/config/danbooru_default_config.rb index 88b1c9773..5f7ea74a2 100644 --- a/config/danbooru_default_config.rb +++ b/config/danbooru_default_config.rb @@ -4,7 +4,7 @@ module Danbooru class Configuration # The version of this Danbooru. def version - "2.27.0" + "2.28.0" end # The name of this Danbooru.