gitlab-org--gitlab-foss/config/initializers/fix_local_cache_middleware.rb
Lin Jen-Shin 07d3d44775 Move ModuleWithInstanceVariables to Gitlab namespace
And use .rubocop.yml to exclude paths we don't care,
rather than using the cop itself to exclude.
2017-11-22 17:06:57 +08:00

24 lines
905 B
Ruby

module LocalCacheRegistryCleanupWithEnsure
LocalCacheRegistry =
ActiveSupport::Cache::Strategy::LocalCache::LocalCacheRegistry
LocalStore =
ActiveSupport::Cache::Strategy::LocalCache::LocalStore
def call(env)
LocalCacheRegistry.set_cache_for(local_cache_key, LocalStore.new)
response = @app.call(env) # rubocop:disable Gitlab/ModuleWithInstanceVariables
response[2] = ::Rack::BodyProxy.new(response[2]) do
LocalCacheRegistry.set_cache_for(local_cache_key, nil)
end
cleanup_after_response = true # ADDED THIS LINE
response
rescue Rack::Utils::InvalidParameterError
[400, {}, []]
ensure # ADDED ensure CLAUSE to cleanup when something is thrown
LocalCacheRegistry.set_cache_for(local_cache_key, nil) unless
cleanup_after_response
end
end
ActiveSupport::Cache::Strategy::LocalCache::Middleware
.prepend(LocalCacheRegistryCleanupWithEnsure)