我正在尝试按照this tutorial将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
答案 0 :(得分: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>
答案 1 :(得分:2)
出现以下问题,但我们无法将redis gem升级到3.x.事实证明,redis-rb正在寻找redis配置的键/值对,这在运行redis-server
时并不存在。
使用配置文件
运行redis-serverredis-server /usr/local/etc/redis.conf
解决了这个问题。
答案 2 :(得分:1)
我还没有使用redis,但基于粗略的外观,似乎你正在使用redis-ruby库。您可能希望在可用时尝试使用redis-rails!(http://rubygems.org/gems/redis-rails)
最简单的方法是,查找Gemfile,并删除有关redis gem的信息。将该行替换为:
gem 'redis-rails'
保存文件,然后运行:
$ bundle install
答案 3 :(得分:0)
我遇到了同样的问题,结果homebrew
已将我的redis-server
从2.6.x更新为2.8.6
我恢复了旧版本的redis,它确实有效!
答案 4 :(得分: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)
或者只要你输入redis
之后的任何时候,你就会收到这个错误。但是如果你忽略它就行了
redis.get 'foo'
一切正常。