私が構築している 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 は問題なく動作し、すべてにアクセスしてキーを作成できます。
どうしたの?私は完全に困惑しています。