2

我正在尝试按照本教程让 rails 连接到 redis 。但是当我尝试$redis = Redis.new(:host => 'localhost', :port => 6379)甚至只是Redis.new. 我也尝试过新的表示法(host: 'localhost',port: 6379)。Redis 工作(通过 redis-cli 进行 ping-PONG 测试)。

ArgumentError: odd number of arguments for Hash
    from /var/lib/gems/1.9.1/gems/redis-2.1.1/lib/redis.rb:65:in `[]'
    from /var/lib/gems/1.9.1/gems/redis-2.1.1/lib/redis.rb:65:in `info'
    from /var/lib/gems/1.9.1/gems/redis-2.1.1/lib/redis.rb:606:in `inspect'
    from /var/lib/gems/1.9.1/gems/railties-4.0.0/lib/rails/commands/console.rb:90:in `start'
    from /var/lib/gems/1.9.1/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in `start'
    from /var/lib/gems/1.9.1/gems/railties-4.0.0/lib/rails/commands.rb:64:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

我究竟做错了什么?

Config Details:
$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
$ rails -v
Rails 4.0.0
4

5 回答 5

7

我使用 redis gem 版本 2.1.1 收到相同的错误。尝试将 redis gem 更新到最新版本,即 3.0.4 版本。

要更新 redis gem,您可以运行

gem update redis

更新本地安装的版本,或运行

bundle update redis

更新作为 Gemfile 的一部分安装的 redis gem。

$ irb
1.9.3p392 :001 > require 'redis'
 => true 
1.9.3p392 :002 > Redis.new(:host => 'localhost', :port => 6379)
ArgumentError: odd number of arguments for Hash
from /Users/zachallett/.rvm/gems/ruby-1.9.3-p392/gems/redis-2.1.1/lib/redis.rb:65:in `[]'
from /Users/zachallett/.rvm/gems/ruby-1.9.3-p392/gems/redis-2.1.1/lib/redis.rb:65:in `info'
from /Users/zachallett/.rvm/gems/ruby-1.9.3-p392/gems/redis-2.1.1/lib/redis.rb:606:in `inspect'
from /Users/zachallett/.rvm/rubies/ruby-1.9.3-p392/bin/irb:16:in `<main>'

.

$ irb
1.9.3p392 :001 > require 'redis'
 => true 
1.9.3p392 :002 > Redis.new(:host => 'localhost', :port => 6379)
 => #<Redis client v3.0.4 for redis://localhost:6379/0> 
于 2013-09-11T18:45:41.683 回答
2

有以下问题,但我们无法将 redis gem 升级到 3.x。事实证明,redis-rb 正在为 redis 配置寻找一个键/值对,它在运行时不存在redis-server

使用配置文件运行 redis-server

redis-server /usr/local/etc/redis.conf

解决了这个问题。

于 2015-04-15T00:14:50.433 回答
1

我还没有使用过 redis,但粗略看了一下,好像你正在使用 redis-ruby 库。您可能想在可用时尝试使用 redis-rails!( http://rubygems.org/gems/redis-rails )

最简单的方法是查找 Gemfile,然后删除有关 redis gem 的信息。将该行替换为:

gem 'redis-rails'

保存文件,然后运行:

$ bundle install
于 2013-09-11T19:28:53.437 回答
0

我遇到了同样的问题,结果homebrewredis-server的从 2.6.x 更新到了 2.8.6

我恢复到旧版本的 redis 并且它有效!

于 2014-03-04T19:39:28.833 回答
0

我遇到了同样的错误。我注意到的第一件事是,此错误与在控制台中显示为对象表示的视觉输出有关。该inspect方法就是为此目的而调用的方法。从堆栈跟踪中查看以下内容:

/var/lib/gems/1.9.1/gems/redis-2.1.1/lib/redis.rb:606:in 'inspect'

因此,如果您这样做redis = Redis.new(:host => 'localhost', :port => 6379) 或任何时候您只输入redistherafter,您将收到此错误。但是,如果您忽略它并只是做 redis.get 'foo'一切工作就好了。

于 2016-08-27T20:51:26.097 回答