Sidekiq: With Rails 5.1 and Ruby 2.4.0, Sidekiq configuration file causes undefined method each at startup

Created on 4 May 2017  Â·  4Comments  Â·  Source: mperham/sidekiq

Ruby version: 2.4.0
Sidekiq / Pro / Enterprise version(s):
Sidekiq
Please include your initializer and any error message with the full backtrace.

I am moving from Delayed Job to Sidekiq in a Rails 5.1 project. I have a sidekiq.yml configuration file with the following contents:

:concurrency: 5
:queues:
  — mailers
  - default

This matches the expected format documented at https://github.com/mperham/sidekiq/wiki/Advanced-Options

However, when Sidekiq starts (e.g., locally with bundle exec sidekiq), it fails with this stack trace:

undefined method `each' for "— [mailers, 2] - [default, 2]":String
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/sidekiq-5.0.0/lib/sidekiq/cli.rb:403:in `parse_queues'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/sidekiq-5.0.0/lib/sidekiq/cli.rb:388:in `parse_config'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/sidekiq-5.0.0/lib/sidekiq/cli.rb:222:in `setup_options'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/sidekiq-5.0.0/lib/sidekiq/cli.rb:39:in `parse'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/sidekiq-5.0.0/bin/sidekiq:11:in `<top (required)>'
/Users/Will/.rbenv/versions/2.4.0/bin/sidekiq:22:in `load'
/Users/Will/.rbenv/versions/2.4.0/bin/sidekiq:22:in `<top (required)>'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli/exec.rb:74:in `load'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli/exec.rb:74:in `kernel_load'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli/exec.rb:27:in `run'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli.rb:335:in `exec'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor.rb:359:in `dispatch'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli.rb:20:in `dispatch'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor/base.rb:440:in `start'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli.rb:11:in `start'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/exe/bundle:32:in `block in <top (required)>'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/friendly_errors.rb:121:in `with_friendly_errors'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/exe/bundle:24:in `<top (required)>'
/Users/Will/.rbenv/versions/2.4.0/bin/bundle:22:in `load'
/Users/Will/.rbenv/versions/2.4.0/bin/bundle:22:in `<main>'

My initializer:

# config/initializers/sidekiq.rb
# See https://medium.com/@benhansen/setting-up-sidekiq-redis-on-aws-elastic-beanstalk-with-elasticache-2efeb32935fe

rails_root = Rails.root || File.dirname(__FILE__) + '/../..'
rails_env = Rails.env || 'development'
redis_config = YAML.load_file(rails_root.to_s + '/config/redis.yml')
redis_config.merge! redis_config.fetch(rails_env, {})
redis_config.symbolize_keys!
Sidekiq.configure_server do |config|
 config.redis = { url: "redis://#{redis_config[:host]}:#{redis_config[:port]}/12" }
end
Sidekiq.configure_client do |config|
 config.redis = { url: "redis://#{redis_config[:host]}:#{redis_config[:port]}/12" }
end)

Are you using an old version? No.
Have you checked the changelog to see if your issue has been fixed in a later version?
Yes

https://github.com/mperham/sidekiq/blob/master/Changes.md

Most helpful comment

That dash in front of "mailers" isn't ASCII.

All 4 comments

Invalid yaml. I'd guess a tabs/spaces issue.

On May 3, 2017, at 10:14 PM, Will Friedman notifications@github.com wrote:

Ruby version: 2.4.0
Sidekiq / Pro / Enterprise version(s):
Sidekiq
Please include your initializer and any error message with the full backtrace.

I am moving from Delayed Job to Sidekiq in a Rails 5.1 project. I have a sidekiq.yml configuration file with the following contents:

:concurrency: 5
:queues:
— mailers

However, when Sidekiq starts (e.g., locally with bundle exec sidekiq), it fails with this stack trace:

undefined method each' for "— [mailers, 2] - [default, 2]":String /Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/sidekiq-5.0.0/lib/sidekiq/cli.rb:403:inparse_queues'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/sidekiq-5.0.0/lib/sidekiq/cli.rb:388:in parse_config' /Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/sidekiq-5.0.0/lib/sidekiq/cli.rb:222:insetup_options'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/sidekiq-5.0.0/lib/sidekiq/cli.rb:39:in parse' /Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/sidekiq-5.0.0/bin/sidekiq:11:in /Users/Will/.rbenv/versions/2.4.0/bin/sidekiq:22:in load' /Users/Will/.rbenv/versions/2.4.0/bin/sidekiq:22:in /Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli/exec.rb:74:in load' /Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli/exec.rb:74:inkernel_load'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli/exec.rb:27:in run' /Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli.rb:335:inexec'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor/command.rb:27:in run' /Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:ininvoke_command'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor.rb:359:in dispatch' /Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli.rb:20:indispatch'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor/base.rb:440:in start' /Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli.rb:11:instart'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/exe/bundle:32:in block in <top (required)>' /Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/friendly_errors.rb:121:inwith_friendly_errors'
/Users/Will/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/exe/bundle:24:in <top (required)>' /Users/Will/.rbenv/versions/2.4.0/bin/bundle:22:inload'
/Users/Will/.rbenv/versions/2.4.0/bin/bundle:22:in `

'
My initializer:

config/initializers/sidekiq.rb

See https://medium.com/@benhansen/setting-up-sidekiq-redis-on-aws-elastic-beanstalk-with-elasticache-2efeb32935fe

rails_root = Rails.root || File.dirname(__FILE__) + '/../..'
rails_env = Rails.env || 'development'
redis_config = YAML.load_file(rails_root.to_s + '/config/redis.yml')
redis_config.merge! redis_config.fetch(rails_env, {})
redis_config.symbolize_keys!
Sidekiq.configure_server do |config|
config.redis = { url: "redis://#{redis_config[:host]}:#{redis_config[:port]}/12" }
end
Sidekiq.configure_client do |config|
config.redis = { url: "redis://#{redis_config[:host]}:#{redis_config[:port]}/12" }
end)
Are you using an old version? No.
Have you checked the changelog to see if your issue has been fixed in a later version?
Yes

https://github.com/mperham/sidekiq/blob/master/Changes.md

—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.

Thanks for your quick response, and for a great product. I know YAML needs spaces not tabs. I am using Sublime 3 with translate_tabs_to_spaces set on, and I've confirmed that these are spaces. I'm doing the same thing here that I'm doing in my other YAML files and I don't have an issue with them. When I cut and paste my file into http://www.yamllint.com/, it says it is valid YAML.

If you have any ideas please let me know. Thanks for your time.

That dash in front of "mailers" isn't ASCII.

Wow, good catch. Thanks!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

aglushkov picture aglushkov  Â·  3Comments

davidcelis picture davidcelis  Â·  3Comments

rajcybage picture rajcybage  Â·  3Comments

edgarjs picture edgarjs  Â·  3Comments

BeRMaNyA picture BeRMaNyA  Â·  3Comments