2012-09-04 56 views
3

我试图Redis的挂钩到一个西纳特拉的应用程序连接到Redis的我的建筑:无法从西纳特拉

require 'rubygems' 
require 'sinatra' 
#require 'sinatra/synchrony' 
require 'redis' 
require 'mongo_mapper' 

require './startup' 

def stats_connect 
uri = URI.parse('redis://redistogo:[email protected]:1337/') 
puts 'connecting to... ' + uri.to_s 
redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password) 
puts "Statistics connected >> OK" if redis 
return redis 
end 

stats = stats_connect 

post('/') do 
#... 
end 

如果我运行工头下面的应用程序,我得到这个错误:

  • 18:09:02 web.1 |以pid开头825

  • 18:09:08 web.1 | /Users/vladdypwnz/.rvm/gems/ruby-1.9.2-p180/gems/redis-3.0.1/lib/redis/connection/ruby.rb:113:in `connect_nonblock':无法分配请求地址 - 连接(2) (Errno :: EADDRNOTAVAIL)

  • 18:09:08 web.1 |从 /Users/vladdypwnz/.rvm/gems/ruby-1.9.2-p180/gems/redis-3.0.1/lib/redis/connection/ruby.rb:113:in '连接”

当我推到Heroku的,错误更改为:

/app/vendor/bundle/ruby/1.9.1/gems/redis-3.0.1/lib/redis/client.rb:260:在`rescue in establish_connection'中:在barb.redistogo.com:0(Redis :: CannotConnectError)上超时连接到Redis

如果我弹入IRB,需要redis并使用相同的确切stats_connect()me我创建的方法,redis工作得很好,我可以访问所有内容并创建密钥。

发生了什么事?我完全被难住了。

回答

4

你确定你的redis在barb.redistogo.com:1337上运行吗? 几个星期前,我部署使用Redis的到Heroku的一个应用程序,并使用此配置:

uri = URI.parse(ENV["REDISTOGO_URL"]) 
redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password) 

在本地运行它,我做的事:

redis = Redis.new(:host => "localhost", :port => 6379) 
+0

得到它排序 - 根据它试图日志与barb.redistogo.com:0相连,因为事实证明,URI解析了端口为零的地址。不知道为什么。 –