【发布时间】:2014-02-09 11:33:49
【问题描述】:
我的应用可以使用 DelayedJob,但速度很慢,所以我决定改用 Sidekiq。
到目前为止,它还不能用于 Sidekiq 的测试或开发。 (当然,我还没有尝试使用 Sidekiq 进行生产。)
从 DelayedJob 迁移到 Sidekiq 时,我首先更新了我的 Profile:
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
# worker: bundle exec rake jobs:work
before_fork do |server, worker|
@sidekiq_pid ||= spawn("bundle exec sidekiq -c 2")
end
我假设这意味着我不必在foreman start 之前输入bundle exec sidekiq,对吧?这也应该在我运行测试时启动 sidekiq,对吧?
但在我的测试中,我的应用程序中表示为 @instance.delay.method 的所有内容(应该与 DelayedJob 和 Sidekiq 一起使用)都不起作用。
因此,为了了解正在发生的事情,我在routes.rb 中添加了以下内容:
Testivate::Application.routes.draw do
require 'sidekiq/web'
mount Sidekiq::Web, at: "/sidekiq"
但是当我重新启动并访问 localhost:3000/sidekiq 时,我只看到:
No route matches [GET] "/sidekiq"
Routes
Routes match in priority from top to bottom
Helper HTTP Verb Path Controller#Action
Path / Url
sidekiq_web_path /sidekiq Sidekiq::Web
顺便说一句,redis 似乎在本地自动运行:
$ redis-cli ping
PONG
我捆绑的gemfile 包括:
ruby "2.0.0"
gem "rails", "4.0.2"
gem 'sinatra', require: false
gem 'slim'
gem "sidekiq"
gem "autoscaler"
我没有对unicorn.rb进行任何更改:
# config/unicorn.rb
worker_processes 3
timeout 360
preload_app true
before_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
Process.kill 'QUIT', Process.pid
end
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end
after_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to sent QUIT'
end
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
end
【问题讨论】:
标签: heroku redis unicorn sidekiq