Я использую Sidekiq
и Clockwork
для фоновых заданий и планирования. Мой lib/clock.rb
имеет следующий код для выполнения некоторой задачи грабли:Clockwork and register_javascript_expansion exception
require 'clockwork'
require File.expand_path('../../config/boot', __FILE__)
require File.expand_path('../../config/environment', __FILE__)
require 'sidekiq'
include Clockwork
include Sidekiq
module Clockwork
every(1.day, 'rake places:get_from_api', at: '22:45') do
Sidekiq.logger.info 'Starting rake places:get_from_api'
execute_rake('places.rake', 'places:get_from_api') if Rails.env.production?
end
end
def execute_rake(file,task)
require 'rake'
rake = Rake::Application.new
Rake.application = rake
Rake::Task.define_task(:environment)
load "#{Rails.root}/lib/tasks/#{file}"
rake[task].invoke
end
Я разворачивать приложение на EngineYard и иметь after_restart.rb
крюк:
if environment == 'production'
cw_pid_file = "#{shared_path}/pids/clockwork.pid"
# stop clockwork
run "if [ -d #{current_path} ] && [ -f #{cw_pid_file} ]; then cd #{current_path} && kill -int $(cat #{cw_pid_file}) 2>/dev/null; else echo 'clockwork was not running' ; fi"
## start clockwork
run "cd #{current_path} && bundle exec clockworkd -C#{current_path}/lib/clock.rb --pid-dir #{shared_path}/pids --log --log-dir #{shared_path}/log restart >> log/clockwork.log 2>&1 &"
run "ps -eo pid,command | grep clockwork | grep -v grep | awk '{print $1}' > #{cw_pid_file}"
end
После развертывания я вижу an exception в clockworkd.clock.output
журнале.
Как установить его?
Спасибо за ваш ответ. Я знаю об этой функции, но я хочу найти какое-то решение без crontab :) – akrisanov
Есть ли какая-то особая причина, по которой вы не хотите использовать cron? – roryhughes
У меня нет особой причины. Просто хочу получить опыт с чистым рубиновым решением. – akrisanov