私の質問が既に存在し、ここで解決されている場合は申し訳ありませんが、何も役に立ちません。私はレールアプリを持っています。私はResqueをうまく使っています。今、遅延したタスクでレスキュー スケジューラを動作させたいと考えています。たとえば、30 秒の遅延でメールを送信したいとします。私の Gemfile:
...
gem 'resque'
gem 'resque-scheduler'
...
resque.rb:
uri = URI.parse("redis://localhost:6379/")
Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
Dir["#{Rails.root}/app/jobs/*.rb"].each { |file| require file }
resque.rake:
require 'resque/tasks'
require 'resque/scheduler/tasks'
task :scheduler_environment do
Resque::Scheduler.dynamic = true
end
task 'resque:scheduler_setup' => :scheduler_environment
task 'resque:setup' => :environment
task "resque:setup" do
ENV['QUEUE'] = '*'
end
deploy.rb:
...
task :start_workers do
queue 'echo "-----> Start resque-workers"'
queue "cd #{app_path} && RAILS_ENV=#{rails_env} && touch resque.pid"
queue "cd #{app_path} && RAILS_ENV=production bundle exec rake resque:work QUEUE=* BACKGROUND=yes TERM_CHILD=1"
queue 'echo "-----> Start resque-scheduler"'
queue "cd #{app_path} && RAILS_ENV=production bundle exec rake resque:scheduler BACKGROUND=yes DYNAMIC_SCHEDULE=true"
end
...
だから私が実行したとき:Resque.enqueue(TestJob, 'now job')
それはうまくいきます^しかし、私が実行したとき:Resque.enqueue_in(15.seconds, TestJob, '15 sec delayed job')
次のデプロイまで何も起こりません:
-----> Duplicating Unicorn...
-----> Start resque-workers
-----> Start resque-scheduler
resque-scheduler: [INFO] 2016-01-15T13:06:25+03:00: Starting
resque-scheduler: [INFO] 2016-01-15T13:06:25+03:00: Reloading Schedule
-----> Start clockwork
resque-scheduler: [INFO] 2016-01-15T13:06:25+03:00: Loading Schedule
resque-scheduler: [INFO] 2016-01-15T13:06:25+03:00: Schedule empty! Set Resque.schedule
resque-scheduler: [INFO] 2016-01-15T13:06:25+03:00: Schedules Loaded
resque-scheduler: [INFO] 2016-01-15T13:06:25+03:00: Processing Delayed Items
clockworkd.production: pid file: /home/deployer/server/shared/tmp/pids/clockworkd.production.pid
clockworkd.production: output log file: /home/deployer/server/shared/log/clockworkd.production.output
clockworkd.production: process with pid 23911 started.
-----> Done. Deployed v37
では、遅延したタスクをオンザフライで実行するようにレスキュー スケジューラを設定するにはどうすればよいでしょうか。
ps実行すると:
RAILS_ENV=production bundle exec rake resque:scheduler BACKGROUND=yes DYNAMIC_SCHEDULE=true
コンソールを介して実稼働サーバーで、レスキュースケジューラが正常に機能し、新しい遅延タスクをすべて希望どおりに処理しています