mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-28 22:16:15 +10:00
Merge branch 'redis-config-parser' into 'master'
Parse config/resque.yml in one place only See merge request !3140
This commit is contained in:
+2
-16
@@ -4,6 +4,7 @@ require 'rails/all'
|
||||
require 'devise'
|
||||
I18n.config.enforce_available_locales = false
|
||||
Bundler.require(:default, Rails.env)
|
||||
require_relative '../lib/gitlab/redis_config'
|
||||
|
||||
module Gitlab
|
||||
REDIS_CACHE_NAMESPACE = 'cache:gitlab'
|
||||
@@ -67,22 +68,7 @@ module Gitlab
|
||||
end
|
||||
end
|
||||
|
||||
# Use Redis caching across all environments
|
||||
redis_config_file = Rails.root.join('config', 'resque.yml')
|
||||
|
||||
redis_url_string = if File.exists?(redis_config_file)
|
||||
YAML.load_file(redis_config_file)[Rails.env]
|
||||
else
|
||||
"redis://localhost:6379"
|
||||
end
|
||||
|
||||
# Redis::Store does not handle Unix sockets well, so let's do it for them
|
||||
redis_config_hash = Redis::Store::Factory.extract_host_options_from_uri(redis_url_string)
|
||||
redis_uri = URI.parse(redis_url_string)
|
||||
if redis_uri.scheme == 'unix'
|
||||
redis_config_hash[:path] = redis_uri.path
|
||||
end
|
||||
|
||||
redis_config_hash = Gitlab::RedisConfig.redis_store_options
|
||||
redis_config_hash[:namespace] = REDIS_CACHE_NAMESPACE
|
||||
redis_config_hash[:expires_in] = 2.weeks # Cache should not grow forever
|
||||
config.cache_store = :redis_store, redis_config_hash
|
||||
|
||||
@@ -13,9 +13,12 @@ end
|
||||
if Rails.env.test?
|
||||
Gitlab::Application.config.session_store :cookie_store, key: "_gitlab_session"
|
||||
else
|
||||
redis_config = Gitlab::RedisConfig.redis_store_options
|
||||
redis_config[:namespace] = 'session:gitlab'
|
||||
|
||||
Gitlab::Application.config.session_store(
|
||||
:redis_store, # Using the cookie_store would enable session replay attacks.
|
||||
servers: Rails.application.config.cache_store[1].merge(namespace: 'session:gitlab'), # re-use the Redis config from the Rails cache store
|
||||
servers: redis_config,
|
||||
key: '_gitlab_session',
|
||||
secure: Gitlab.config.gitlab.https,
|
||||
httponly: true,
|
||||
|
||||
@@ -1,16 +1,9 @@
|
||||
# Custom Redis configuration
|
||||
config_file = Rails.root.join('config', 'resque.yml')
|
||||
|
||||
resque_url = if File.exists?(config_file)
|
||||
YAML.load_file(config_file)[Rails.env]
|
||||
else
|
||||
"redis://localhost:6379"
|
||||
end
|
||||
SIDEKIQ_REDIS_NAMESPACE = 'resque:gitlab'
|
||||
|
||||
Sidekiq.configure_server do |config|
|
||||
config.redis = {
|
||||
url: resque_url,
|
||||
namespace: 'resque:gitlab'
|
||||
url: Gitlab::RedisConfig.url,
|
||||
namespace: SIDEKIQ_REDIS_NAMESPACE
|
||||
}
|
||||
|
||||
config.server_middleware do |chain|
|
||||
@@ -36,7 +29,7 @@ end
|
||||
|
||||
Sidekiq.configure_client do |config|
|
||||
config.redis = {
|
||||
url: resque_url,
|
||||
namespace: 'resque:gitlab'
|
||||
url: Gitlab::RedisConfig.url,
|
||||
namespace: SIDEKIQ_REDIS_NAMESPACE
|
||||
}
|
||||
end
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<%
|
||||
require "yaml"
|
||||
require "json"
|
||||
require_relative "lib/gitlab/redis_config"
|
||||
|
||||
rails_env = ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development"
|
||||
|
||||
@@ -17,13 +18,7 @@ if File.exists?(config_file)
|
||||
config['mailbox'] = "inbox" if config['mailbox'].nil?
|
||||
|
||||
if config['enabled'] && config['address'] && config['address'].include?('%{key}')
|
||||
redis_config_file = "config/resque.yml"
|
||||
redis_url =
|
||||
if File.exists?(redis_config_file)
|
||||
YAML.load_file(redis_config_file)[rails_env]
|
||||
else
|
||||
"redis://localhost:6379"
|
||||
end
|
||||
redis_url = Gitlab::RedisConfig.new(rails_env).url
|
||||
%>
|
||||
-
|
||||
:host: <%= config['host'].to_json %>
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
module Gitlab
|
||||
class RedisConfig
|
||||
attr_reader :url
|
||||
|
||||
def self.url
|
||||
new.url
|
||||
end
|
||||
|
||||
def self.redis_store_options
|
||||
url = new.url
|
||||
redis_config_hash = Redis::Store::Factory.extract_host_options_from_uri(url)
|
||||
# Redis::Store does not handle Unix sockets well, so let's do it for them
|
||||
redis_uri = URI.parse(url)
|
||||
if redis_uri.scheme == 'unix'
|
||||
redis_config_hash[:path] = redis_uri.path
|
||||
end
|
||||
redis_config_hash
|
||||
end
|
||||
|
||||
def initialize(rails_env=nil)
|
||||
rails_env ||= Rails.env
|
||||
config_file = File.expand_path('../../../config/resque.yml', __FILE__)
|
||||
|
||||
@url = "redis://localhost:6379"
|
||||
if File.exists?(config_file)
|
||||
@url =YAML.load_file(config_file)[rails_env]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -4,16 +4,16 @@ namespace :cache do
|
||||
|
||||
desc "GitLab | Clear redis cache"
|
||||
task :clear => :environment do
|
||||
redis_store = Rails.cache.instance_variable_get(:@data)
|
||||
redis = Redis.new(url: Gitlab::RedisConfig.url)
|
||||
cursor = REDIS_SCAN_START_STOP
|
||||
loop do
|
||||
cursor, keys = redis_store.scan(
|
||||
cursor, keys = redis.scan(
|
||||
cursor,
|
||||
match: "#{Gitlab::REDIS_CACHE_NAMESPACE}*",
|
||||
count: CLEAR_BATCH_SIZE
|
||||
)
|
||||
|
||||
redis_store.del(*keys) if keys.any?
|
||||
redis.del(*keys) if keys.any?
|
||||
|
||||
break if cursor == REDIS_SCAN_START_STOP
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user