小编Car*_*auf的帖子

无法挽救Redis连接拒绝

我试图编写一个尝试使用默认TCP设置连接到Redis的函数,如果失败,尝试通过unix套接字连接到Redis.我的意图是有一个适用于我所有系统的连接脚本,其中一些使用TCP,另一些使用套接字.

但是,我似乎无法从失败的TCP连接中解救出来.这是我的测试脚本.

require "redis"

def r
  begin
    $redis ||= Redis.new
  rescue
    $redis = Redis.new(:path => "/tmp/redis.sock")
  end
end

puts "You have #{r.keys.count} redis keys"
Run Code Online (Sandbox Code Playgroud)

rescue块永远不会被执行,而是引发异常.这是此脚本的输出.

/usr/local/rvm/gems/ruby-1.9.2-p290/gems/redis-2.2.2/lib/redis/client.rb:236:in `rescue in establish_connection': Connection refused - Unable to connect to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED)
    from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/redis-2.2.2/lib/redis/client.rb:222:in `establish_connection'
    from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/redis-2.2.2/lib/redis/client.rb:23:in `connect'
    from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/redis-2.2.2/lib/redis/client.rb:247:in `ensure_connected'
    from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/redis-2.2.2/lib/redis/client.rb:137:in `block in process'
    from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/redis-2.2.2/lib/redis/client.rb:206:in `logging'
    from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/redis-2.2.2/lib/redis/client.rb:136:in `process'
    from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/redis-2.2.2/lib/redis/client.rb:46:in `call'
    from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/redis-2.2.2/lib/redis.rb:246:in `block in keys'
    from /usr/local/rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
    from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/redis-2.2.2/lib/redis.rb:245:in `keys'
    from scripts/redis.rb:11:in `<main>'

我已经验证了 …

ruby redis

7
推荐指数
1
解决办法
4658
查看次数

ActiveRecord has_many:通过复制质量分配的计数器缓存

似乎ActiveRecord的counter_cache功能可能导致计数器缓存增加两次.我看到这种行为的场景是当我有两个模型has_many :through通过连接模型彼此建立关系时(即:Teacher有很多Student通过Classroom).使用has_many :through生成的方法直接关联教师和学生(无需手动创建连接记录)时,计数会增加2倍.示例:teacher.students << Student.create(name: "Bobby Joe")原因teacher.students_count增加2.

请帮助我找到一个解决方案,减轻或消除这个问题,同时允许我继续使用内置的计数器缓存和通过has_many :through关系的质量分配.

我花了很多时间寻找解决方案并将问题提取到一个小的测试应用程序,这是我可以创建的最简单的失败示例.任何有助于我解决这个问题的额外细节都应该在下面.

示例模式和模型:

create_table :teachers do |t|
  t.string  :name
  t.integer :students_count, default: 0
  t.timestamps
end

class Teacher < ActiveRecord::Base
  has_many :classrooms
  has_many :students, :through => :classrooms
end

create_table :students do |t|
  t.string  :name
  t.integer :teachers_count, default: 0
  t.timestamps
end

class Student < ActiveRecord::Base
  has_many :classrooms
  has_many :teachers, :through => :classrooms
end

create_table :classrooms do |t|
  t.references …
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails has-many-through

6
推荐指数
1
解决办法
1383
查看次数

使用纯ruby存储数据的最佳方式,无依赖关系

我必须只使用ruby core或stdlib中提供的工具创建一个应用程序.YAML或SQLite是否带有红宝石?有哪些其他工具可以让我将数据存储到文件中?它们的优点和缺点是什么?

ruby

2
推荐指数
1
解决办法
579
查看次数