3

私が構築している Sinatra アプリに redis を接続しようとしています:

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

require './startup'

def stats_connect
 uri = URI.parse('redis://redistogo:xxxxxxxxxxxxxxxxxx@barb.redistogo.com: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

foreman で次のアプリを実行すると、次のエラーが発生します。

  • 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': 要求されたアドレスを割り当てられません - connect(2) (エラー番号::EADDRNOTAVAIL)

  • 18:09:08 web.1 | from /Users/vladdypwnz/.rvm/gems/ruby-1.9.2-p180/gems/redis-3.0.1/lib/redis/connection/ruby.rb:113:in `connect'

Heroku にプッシュすると、エラーは次のように変わります。

/app/vendor/bundle/ruby/1.9.1/gems/redis-3.0.1/lib/redis/client.rb:260:in `rescue in Establish_connection': barb.redistogo.com の Redis への接続がタイムアウトしました: 0 (Redis::CannotConnectError)

IRB にアクセスして redis を要求し、作成したのとまったく同じ stats_connect() メソッドを使用すると、redis は問題なく動作し、すべてにアクセスしてキーを作成できます。

どうしたの?私は完全に困惑しています。

4

1 に答える 1

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)
于 2012-09-04T00:32:07.337 に答える