In development mode, if an avatar is missing just serve up a placeholder

This commit is contained in:
Robin Ward 2014-01-17 11:47:01 -05:00
parent 1806a7d4b3
commit 18e719b0af
2 changed files with 28 additions and 0 deletions

View File

@ -43,7 +43,9 @@ Discourse::Application.configure do
config.enable_mini_profiler = true config.enable_mini_profiler = true
require 'middleware/turbo_dev' require 'middleware/turbo_dev'
require 'middleware/missing_avatars'
config.middleware.insert 0, Middleware::TurboDev config.middleware.insert 0, Middleware::TurboDev
config.middleware.insert 1, Middleware::MissingAvatars
config.enable_anon_caching = false config.enable_anon_caching = false
end end

View File

@ -0,0 +1,26 @@
module Middleware
# In development mode, it is common to use a database from a production site for testing
# with their data. Unfortunately, you can end up with dozens of missing avatar requests
# due to the files not being present locally. This middleware, only enabled in development
# mode, will replace those with an appropriate image.
class MissingAvatars
def initialize(app, settings={})
@app = app
end
def call(env)
if (env['REQUEST_PATH'] =~ /^\/uploads\/default\/avatars/)
path = "#{Rails.root}/public#{env['REQUEST_PATH']}"
unless File.exist?(path)
default_image = "#{Rails.root}/public/images/d-logo-sketch-small.png"
return [ 200, { 'Content-Type' => 'image/png' }, [ File.read(default_image)] ]
end
end
status, headers, response = @app.call(env)
[status, headers, response]
end
end
end