28

I'm using wercker for running specs of my rails app. I have problem with setting up redis on wercker. In my rails app I have redis.rb which looks like this:

if Figaro.env.rediscloud_url
  uri = URI.parse(Figaro.env.rediscloud_url)
  REDIS = Redis.new(host: uri.host, port: uri.port, password: uri.password)
elsif ENV['WERCKER_REDIS_HOST'] && ENV['WERCKER_REDIS_PORT']
  REDIS = Redis.new(host: ENV['WERCKER_REDIS_HOST'], port: ENV['WERCKER_REDIS_PORT'])
else
  REDIS = Redis.new
end

In wercker I set WERCKER_REDIS_HOST enviromental variable to: 127.0.0.1 and WERCKER_REDIS_PORT to 6379

When I start my specs it returns:

 Redis::CannotConnectError:
Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED)
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:332:in `rescue in establish_connection'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:318:in `establish_connection'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:94:in `block in connect'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:280:in `with_reconnect'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:93:in `connect'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:351:in `ensure_connected'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:208:in `block in process'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:293:in `logging'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:207:in `process'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:178:in `call_pipelined'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:150:in `block in call_pipeline'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:280:in `with_reconnect'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:148:in `call_pipeline'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis.rb:2245:in `block in multi'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis.rb:57:in `block in synchronize'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis.rb:57:in `synchronize'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis.rb:2237:in `multi'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/sidekiq-4.1.0/lib/sidekiq/client.rb:171:in `block in raw_push'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/connection_pool-2.2.0/lib/connection_pool.rb:64:in `block (2 levels) in with'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/connection_pool-2.2.0/lib/connection_pool.rb:63:in `handle_interrupt'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/connection_pool-2.2.0/lib/connection_pool.rb:63:in `block in with'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/connection_pool-2.2.0/lib/connection_pool.rb:60:in `handle_interrupt'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/connection_pool-2.2.0/lib/connection_pool.rb:60:in `with'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/sidekiq-4.1.0/lib/sidekiq/client.rb:170:in `raw_push'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/sidekiq-4.1.0/lib/sidekiq/client.rb:67:in `push'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/sidekiq-4.1.0/lib/sidekiq/worker.rb:115:in `client_push'
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/sidekiq-4.1.0/lib/sidekiq/extensions/generic_proxy.rb:19:in `method_missing'
# ./app/models/user.rb:26:in `send_reset_password_instructions'
# ./spec/models/user_spec.rb:43:in `block (3 levels) in <top (required)>'
# ------------------
# --- Caused by: ---
# IO::EINPROGRESSWaitWritable:
# Operation now in progress - connect(2) would block
# /pipeline/cache/bundle-install/ruby/2.3.0/gems/redis-3.2.2/lib/redis/connection/ruby.rb:122:in `connect_addrinfo'

How can I fix that?

Mateusz Urbański
  • 7,352
  • 15
  • 68
  • 133
  • Does it work if you add a sleep before connecting? I have seen cases where the startup of redis or mysql takes a bit longer and the build steps try accessing it too fast. There is a `service-ready` step or sthg similar, use that. – ZeissS Mar 24 '16 at 18:22
  • double checked it - the step is called `service-check`: https://app.wercker.com/#applications/565702a38faa27fb0d1db58a/tab/details/ – ZeissS Mar 24 '16 at 18:31

4 Answers4

30

I had the same problem, but I found a fix:

Start Redis manually in terminal with redis-server

Mirror318
  • 11,875
  • 14
  • 64
  • 106
21

I had the same issue and the steps I used to solve this in Mac OSX Catalina were:

  1. Install redis (if not installed)
brew install redis
  1. Start the redis server (thanks @Mirror318)
redis-server

or to start in background

# By default Redis does not run as a daemon. Use 'yes' to use it
redis-server --daemonize yes
Daniel Santana
  • 1,493
  • 20
  • 19
12

You may also need to install redis-server

$ sudo apt install redis-server
Salma Gomaa
  • 952
  • 1
  • 13
  • 18
  • 3
    If you are on a Mac and are using Homebrew, you can simply run `brew install redis`, and you'll be good to go. (It fixed it for me, anyway.) – Gabe Mar 14 '19 at 20:54
0

REDIS might not be installed

sudo apt install redis-server

If you're on MAC

brew install redis

Start the server by

redis-server

Sometimes, REDIS server can run out memory due to unexpected load or if you're on server side CPU utilization. You can see the exact cause of this

sudo systemctl status redis-server

For logs,

journalctl -u redis-server.service

To Restart the server

sudo systemctl restart redis-server