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/app/views/posts/show.html.erb b/app/views/posts/show.html.erb
index 326b3e012..6a42f6f5b 100644
--- a/app/views/posts/show.html.erb
+++ b/app/views/posts/show.html.erb
@@ -108,14 +108,14 @@
-
-
+
+
<% if @post.twitter_card_supported? %>
-
+
<% end %>
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.
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 7948739ab..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 = :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..5ccaf4cdc
--- /dev/null
+++ b/config/initializers/z_dalli.rb
@@ -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