【问题标题】:Can't connect to Redis from Sinatra无法从 Sinatra 连接到 Redis
【发布时间】:2012-08-28 15:09:36
【问题描述】:

我正在尝试将 redis 连接到我正在构建的 Sinatra 应用程序:

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

如果我使用工头运行以下应用程序,我会收到此错误:

  • 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) (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:in `rescue inestablish_connection': 连接到 Redis 超时barb.redistogo.com:0 (Redis::CannotConnectError)

如果我进入 IRB,需要 redis 并使用我创建的完全相同的 stats_connect() 方法,redis 工作正常,我可以访问所有内容并创建密钥。

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

【问题讨论】:

    标签: ruby heroku sinatra redis redistogo


    【解决方案1】:

    您确定您的 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)
    

    【讨论】:

    • 得到了排序 - 根据它试图连接到 barb.redistogo.com:0 的日志,因为事实证明,URI 解析了端口为 nil 的地址。不知道为什么。
    猜你喜欢
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2020-07-31
    • 2017-03-12
    • 2018-07-12
    • 2022-01-26
    • 1970-01-01
    相关资源
    最近更新 更多