如何在Heroku上启动Redis?

17
我已经在Heroku上添加了Redistogo纳米附加组件,并在控制台中成功测试过。但是当我的应用程序尝试连接Redis时,出现以下错误:

Heroku日志文件:

2011-10-12T08:19:50+00:00 app[web.1]: Errno::ECONNREFUSED (Connection refused - Unable to connect to Redis on 127.0.0.1:6379):
2011-10-12T08:19:50+00:00 app[web.1]:   app/controllers/sessions_controller.rb:14:in `create'

为什么它试图在本地访问Redis?

我的config/initializers文件夹中的Redis.rb几乎肯定是问题所在。

#What's pasted below is pasted ad verbatim. I don't know what to change the values to.

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

我猜 ENV["REDISTOGO_URL"] 是本地主机地址?请尝试在生产环境中使用你的 Heroku 域名 URL 来设置该变量。 - Mikhail Nikalyukin
1
当您添加Redis To Go插件时,Heroku会为您设置REDISTOGO_URL,以便成为Redis To Go实例的URL。 - John Beynon
2
如果已经设置了URL,为什么还会尝试使用localhost? - Simpleton
2个回答

21

你是否正在使用 Resque?如果是,那么你需要告诉 Resque 使用哪个 Redis。

Resque.redis = REDIS

如果没有设置成功,那么您发布的代码就没有建立 REDIS 连接。


1
顺便提一下,您可以将此行代码添加到问题中显示的初始化文件的末尾,或者您可以仅在初始化器中用Resque.redis替换REDIS变量以使其正常工作。 - fholgado
1
超级赞。这是我的问题的解决方案。很奇怪,因为我在Heroku中使用了ENV["REDISTOGO_URL"]而不是ENV["my_actual_url_from_heroku"],但它却起作用了。 - Sasha

6

试试这个:

heroku config --long | grep REDIS

查看您的REDISTOGO_URL是什么。您可能意外地设置了它。


2
尝试让 Redis gem 处理你的 URL:Redis.connect(:url => ENV['REDISTOGO_URL']) - Jonathan
谢谢。你的代码给了我灵感,让我不需要显式地编写 ENV["REDISTOGO_URL"]。 - Sasha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接