19

iveはresqueをherokuと連携させようとしています。開発モードで正常に動作させることができますが、herokuにプッシュしようとすると

Errno::ECONNREFUSED (Connection refused - Unable to connect to Redis on 127.0.0.1:6379):

次に、 http://blog.redistogo.com/2010/07/26/resque-with-redis-to-go/を読んでフォローしました

サイトにリストされている構成を配置しましたが、次のエラーが発生しました

SocketError (getaddrinfo: nodename nor servname provided, or not known):

私はinitializers/resque.rbを入れました

Resque.after_fork = Proc.new { ActiveRecord::Base.establish_connection }

ENV["redis://redistogo:11111111111111111@lab.redistogo.com:9254/"] ||= "redis://heroku_username:heroku_password@host:9254/"
uri = URI.parse(ENV["redis://redistogo:1111111111111111@lab.redistogo.com:9254/"])
Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)

ただし、上記のエラーがスローされます。現在の開発モードでは、エラーも発生します。

herokuユーザー名(herokuからのアドオンを使用)を使用し、パスワードをherokuに設定し、ポートを9254に変更しようとしましたが、ソケットエラーが発生し続けます。私は何が間違っているのですか?

助けていただければ幸いです。ありがとうございました

アップデート。

@kevin

私は試した

uri = URI.parse(ENV["my_url_string"] || "redis://localhost:9254/" )
REDIS = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)

initializer / redis.rbでも同様ですが、次のエラーが発生します

Errno::ECONNREFUSED (Connection refused - Unable to connect to Redis on 127.0.0.1:6379):

エラーの数値、つまり127.0.0.1:6379は重要ですか?iveは私のredisguiアプリをチェックし、herokuconfigから私のポート番号が9254であることを確認しました

REDISTOGO_URL       => redis://redistogo:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@lab.redistogo.com:9254/

他の構成設定はありましたか?助けてくれてありがとう!

最終更新。

それを私が直した。信じられない!私の完全な解決策は

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

逐語的に。明示的にURLを設定しなくても機能します。これは、herokuがすでにURLを設定しようとしているためです。

4

3 に答える 3

40

私のセットアップでは/config/initializers/redis.rb、次の行を使用しています。

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

MyREDISTOGO_URLはHeroku構成で定義されています。次のように入力することで、それを検証できるはずです。

heroku config --app my_app

出力に次の値が表示されますREDISTOGO_URL

REDISTOGO_URLRedisToGoから直接コピーする必要があります。herokuのインスタンスに移動し、[アドオン]-> [RedisToGo]をクリックして見つけます。

ここにいくつかのポインタがあります:

  1. 上で示したように、コマンドラインからheroku構成にREDIS_TO_GOURLがあることを確認します。
  2. REDIS_TO_GO URLが、[アドオン]-> [RedisToGo]構成でそのインスタンスに割り当てられているものと同じであることを確認します。
于 2012-05-19T02:19:27.557 に答える
15

それを私が直した。信じられない!私の完全な解決策は

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

逐語的に。明示的にURLを設定しなくても機能します。これは、herokuがすでにURLを設定しようとしているためです。

于 2012-05-19T09:08:57.863 に答える
11

同じことを取得したので、基本的にSidekiqはvarsからREDISCLOUD_URLを取得していませんでしたが、REDIS_PROVIDERを取得していました。

heroku config:set REDIS_PROVIDER=REDISCLOUD_URL

それは魅力のように機能しました。

于 2015-06-09T04:15:44.170 に答える