Есть ли камень для проверки логики Redis в Rails?
Как очистка базы данных или очистка хранилища данных по умолчанию после пробного прогона. Я искал и не мог найти его. Это может быть либо отдельный хранилище тестовых данных, либо просто что-то простое, что namespaces все команды Redis в тестовое пространство имен.
Если кто-нибудь знает о каком-либо знании леммы, в противном случае я напишу один и OS это:)
Ответы
Ответ 1
При работе с рельсами и redis я использую другой redis db или namespace для разных сред. Настройка очень проста и похожа на конфигурацию базы данных ActiveRecords.
Сначала создайте конфигурацию: (версия пространства имен закомментирована)
#config/redis.yml
default:
host: localhost
port: 6379
development:
db: 0
# namespace: appname_dev
test:
db: 1
# namespace: appname_test
production:
db: 2
host: 192.168.1.100
# namespace: appname_prod
Затем загрузите конфигурацию и подключитесь к redis через инициализатор:
#config/initializers/redis.rb
REDIS_CONFIG = YAML.load( File.open( Rails.root.join("config/redis.yml") ) ).symbolize_keys
dflt = REDIS_CONFIG[:default].symbolize_keys
cnfg = dflt.merge(REDIS_CONFIG[Rails.env.to_sym].symbolize_keys) if REDIS_CONFIG[Rails.env.to_sym]
$redis = Redis.new(cnfg)
#$redis_ns = Redis::Namespace.new(cnfg[:namespace], :redis => $redis) if cnfg[:namespace]
# To clear out the db before each test
$redis.flushdb if Rails.env == "test"
Не забудьте добавить 'redis-namespace' в свой Gemfile, если вы используете эту версию.
Ответ 2
Вы можете попробовать fakeredis. Это подделка redis, написанная в чистом рубине.
Ответ 3
О, да, есть.
Я использую его во всех своих проектах, где мне нужно проверить логику Redis.
это очень полезно, и это не в той же базе данных, что и ваша локальная разработка, поэтому данные не представляют опасности быть "смешанными"
вот он: я помещаю этот код в свой файл spec_helper.rb, но вы можете поместить его в свой test_helper.rb, если вы используете тестовый блок.
# ==========================> Redis test configuration
REDIS_PID = "#{Rails.root}/tmp/pids/redis-test.pid"
REDIS_CACHE_PATH = "#{Rails.root}/tmp/cache/"
Dir.mkdir "#{Rails.root}/tmp/pids" unless Dir.exists? "#{Rails.root}/tmp/pids"
Dir.mkdir "#{Rails.root}/tmp/cache" unless Dir.exists? "#{Rails.root}/tmp/cache"
config.before(:suite) do
redis_options = {
"daemonize" => 'yes',
"pidfile" => REDIS_PID,
"port" => 9736,
"timeout" => 300,
"save 900" => 1,
"save 300" => 1,
"save 60" => 10000,
"dbfilename" => "dump.rdb",
"dir" => REDIS_CACHE_PATH,
"loglevel" => "debug",
"logfile" => "stdout",
"databases" => 16
}.map { |k, v| "#{k} #{v}" }.join('\n')
`echo '#{redis_options}' | redis-server -`
end
config.after(:suite) do
%x{
cat #{REDIS_PID} | xargs kill -QUIT
rm -f #{REDIS_CACHE_PATH}dump.rdb
}
end