Есть ли камень для проверки логики 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