ruby-on-rails - 无法在 vagrant 上运行 sidekiq

标签 ruby-on-rails ruby redis vagrant sidekiq

我正在使用 Ruby on Rails 开发 Web 应用程序,我想使用 deliver_later 发送电子邮件。

Gemfilegem sidekiq,以及在config/initializer/sidekiq.rb

redis_sec = { host: '127.0.0.1' }
Sidekiq.configure_client do |config|
  config.redis = { url: "redis://#{redis_sec[:host]}:6379", namespace: 'sidekiq' }
end
Sidekiq.configure_server do |config|
  config.redis = { url: "redis://#{redis_sec[:host]}:6379", namespace: 'sidekiq' }
end

最后,在config/sidekiq.yml中,

:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log

我在 app/workers/worker_for_sidekiq.rb 中写了一个测试 sidekiq 队列:

class WorkerForSidekiq
  include Sidekiq::Worker
  sidekiq_options queue: :sidekiq
  def perform(text)
    sleep 5
    p text
  end
end

然后,在 vagrant 上通过 bundle exec sidekiq -q sidekiq 运行 sidekiq 会出现错误:

ERR Syntax error, try CLIENT (LIST | KILL ip:port)
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/redis-3.3.3/lib/redis/client.rb:121:in `call'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/newrelic_rpm-4.2.0.334/lib/new_relic/agent/instrumentation/redis.rb:69:in `call'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/redis-3.3.3/lib/redis/client.rb:104:in `block in connect'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/redis-3.3.3/lib/redis/client.rb:293:in `with_reconnect'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/redis-3.3.3/lib/redis/client.rb:100:in `connect'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/newrelic_rpm-4.2.0.334/lib/new_relic/agent/instrumentation/redis.rb:105:in `connect'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/redis-3.3.3/lib/redis/client.rb:364:in `ensure_connected'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/redis-3.3.3/lib/redis/client.rb:221:in `block in process'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/redis-3.3.3/lib/redis/client.rb:306:in `logging'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/redis-3.3.3/lib/redis/client.rb:220:in `process'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/redis-3.3.3/lib/redis/client.rb:120:in `call'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/newrelic_rpm-4.2.0.334/lib/new_relic/agent/instrumentation/redis.rb:69:in `call'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/redis-3.3.3/lib/redis.rb:251:in `block in info'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/redis-3.3.3/lib/redis.rb:58:in `block in synchronize'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/redis-3.3.3/lib/redis.rb:58:in `synchronize'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/redis-3.3.3/lib/redis.rb:250:in `info'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/sidekiq-5.0.3/lib/sidekiq.rb:111:in `block in redis_info'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/sidekiq-5.0.3/lib/sidekiq.rb:95:in `block in redis'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/connection_pool-2.2.1/lib/connection_pool.rb:64:in `block (2 levels) in with'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/connection_pool-2.2.1/lib/connection_pool.rb:63:in `handle_interrupt'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/connection_pool-2.2.1/lib/connection_pool.rb:63:in `block in with'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/connection_pool-2.2.1/lib/connection_pool.rb:60:in `handle_interrupt'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/connection_pool-2.2.1/lib/connection_pool.rb:60:in `with'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/sidekiq-5.0.3/lib/sidekiq.rb:92:in `redis'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/sidekiq-5.0.3/lib/sidekiq.rb:106:in `redis_info'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/sidekiq-5.0.3/lib/sidekiq/cli.rb:81:in `run'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/sidekiq-5.0.3/bin/sidekiq:12:in `<top (required)>'
/home/vagrant/.rbenv/versions/2.3.0/bin/sidekiq:23:in `load'
/home/vagrant/.rbenv/versions/2.3.0/bin/sidekiq:23:in `<top (required)>'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/bundler-1.14.6/lib/bundler/cli/exec.rb:74:in `load'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/bundler-1.14.6/lib/bundler/cli/exec.rb:74:in `kernel_load'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/bundler-1.14.6/lib/bundler/cli/exec.rb:27:in `run'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/bundler-1.14.6/lib/bundler/cli.rb:335:in `exec'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor.rb:359:in `dispatch'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/bundler-1.14.6/lib/bundler/cli.rb:20:in `dispatch'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor/base.rb:440:in `start'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/bundler-1.14.6/lib/bundler/cli.rb:11:in `start'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/bundler-1.14.6/exe/bundle:32:in `block in <top (required)>'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/bundler-1.14.6/lib/bundler/friendly_errors.rb:121:in `with_friendly_errors'
/home/vagrant/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/bundler-1.14.6/exe/bundle:24:in `<top (required)>'
/home/vagrant/.rbenv/versions/2.3.0/bin/bundle:23:in `load'
/home/vagrant/.rbenv/versions/2.3.0/bin/bundle:23:in `<main>'

所以,我尝试了 reids-cliCLIENT LIST:

redis 127.0.0.1:6379> CLIENT LIST
addr=127.0.0.1:49802 fd=5 idle=0 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=client

我完全遵循了 this Japanese blog 的说明.我用谷歌搜索了一些关键字,例如“sidekiq 语法错误”、“sidekiq Vagrant 错误”、“sidekiq virtualbox”和“sidekiq 客户端列表”,但没有找到有用的文章。

怎么了? sidekiq 在 vagrant 上不可用吗?


  • macOS 塞拉利昂 10.12.5
  • Vagrant 1.9.4
  • centos64( Vagrant )
  • ruby 2.3.0p0
  • rails 5.1.1
  • bundler 1.14.6

gem 文件:

gem 'sidekiq'
gem 'redis', '3.3.3'
gem 'redis-rails'
gem 'redis-namespace'

最佳答案

查看堆栈跟踪,错误似乎源自 this block :

with_reconnect(false) do
  establish_connection
  call [:auth, password] if password
  call [:select, db] if db != 0
  call [:client, :setname, @options[:id]] if @options[:id]
  @connector.check(self)
end

特别注意这一行:

call [:client, :setname, @options[:id]] if @options[:id]

CLIENT SETNAME 命令仅适用于 Redis 2.6.9。如果您尝试使用旧版本运行它,则会收到您所看到的错误消息。

解决方法是至少将 Redis 升级到 2.6.9。

关于ruby-on-rails - 无法在 vagrant 上运行 sidekiq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45114292/

相关文章:

html - 自动完成以及如何让它理解小写和大写

javascript - 通过 ajax 附加内容时 CoffeeScript 不起作用

ruby-on-rails - 如何在 Rails 服务器中使用特定于瘦的 cli 选项

json - 在 Redis 中存储 JSON 文件并检索它

c++ - 请求有关执行 IPC/事件捕获的建议

ruby-on-rails - 使用mongoid更改rails 3应用程序中的id/URL slug

ruby - 如何在 ruby​​ 中显示没有祖先方法的类的所有方法?

ruby - 阻止 Ruby 脚本运行

ruby-on-rails - 我想知道 Ruby 或 Ruby on Rails(框架)中是否有 Head- and Tail-methods

laravel - 从缓存laravel中的数组获取对象值