Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails中是否有测试Redis逻辑的gem?_Ruby On Rails_Ruby On Rails 3_Rubygems_Redis - Fatal编程技术网

Ruby on rails Rails中是否有测试Redis逻辑的gem?

Ruby on rails Rails中是否有测试Redis逻辑的gem?,ruby-on-rails,ruby-on-rails-3,rubygems,redis,Ruby On Rails,Ruby On Rails 3,Rubygems,Redis,例如数据库清理器,或者在测试运行后默认清除数据存储。我找了又找不到。它可以是一个单独的测试数据存储,也可以是一个简单的名称空间,将所有Redis命令命名为一个测试名称空间 如果有人知道任何lemme know,否则我会写一个并操作它:)你可以试试。这是一个用纯ruby编写的伪redis实现 哦,是的,有。 我在所有需要测试Redis逻辑的项目中都使用它 它非常有用,而且与您当地的开发项目不在同一个数据库中,因此数据没有“混合”的危险 就是这样:我将此代码放在spec_helper.rb文件中,但

例如数据库清理器,或者在测试运行后默认清除数据存储。我找了又找不到。它可以是一个单独的测试数据存储,也可以是一个简单的名称空间,将所有Redis命令命名为一个测试名称空间

如果有人知道任何lemme know,否则我会写一个并操作它:)

你可以试试。这是一个用纯ruby编写的伪redis实现

哦,是的,有。 我在所有需要测试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

在使用rails和redis时,我使用不同的redis db或用于不同的环境。设置非常简单,类似于ActiveRecords数据库配置

首先,创建一个配置:(注释掉名称空间版本)

然后加载配置并通过初始值设定项连接到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命名空间”,请记住将其添加到您的GEM文件中。

谢谢!如果可以的话,我会把你的两个答案都标记为正确:)我用过fakeredis,它很棒,但我有一个奇怪的问题。一切正常,除了我将数组存储在集合中,它将整个数组存储为字符串,不知道为什么。例如,如果我做$redis.sadd(“奇数编号”[1,3]),那么$redis.smembers(“奇数编号”)产生[“[1,3]”。顺便说一句,将每个值(1和3)单独相加就可以了。任何解决方案??jlundqvist,如果Rails.env=“test”在config/initializers/redis.rb中放置
$redis.flushdb,是否会在每次测试后自动清理redis db?或者我必须对此做些什么吗?@Meena每次测试运行之前,它都会清理redis db,而不是每个单独的测试。如果你想让Rails.env继续工作,它应该是Rails.env==“test”(双相等)!我做了编辑。
#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"