Resque 및 Resque Schedule을 사용하여 응용 프로그램 시작시 즉시 실행해야하는 작업을 시작합니다. 다른 예약 된 작업은 30 초마다로드됩니다. 레일에서 응용 프로그램 시작시 heroku에 한 번만 Resque 작업 예약
이
내 설정/초기화/redis.rb 응용 프로그램이 기동require 'rake'
require 'resque'
require 'resque/server'
require 'resque_scheduler/tasks'
# This will make the tabs show up.
require 'resque_scheduler'
require 'resque_scheduler/server'
uri = URI.parse(ENV["REDISTOGO_URL"])
REDIS = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
Resque.redis = REDIS
Dir["#{Rails.root}/app/workers/*.rb"].each { |file| require file }
Resque.enqueue(AllMessageRetriever)
Resque.schedule = YAML.load_file(Rails.root.join('config', 'schedule.yml'))
에 대한 코드의 AllMessageRetriever 한 번만보다 2 ~ 3 배 오히려 실행됩니다. 이니셜 라이저가 두 번 이상 호출됩니까? 이것은 Heroku와 내 지역 환경 모두에서 발생합니까?
Resque-Scheduler에서 지연된 작업을 설정할 수 있습니까?이 작업은 런타임에 한 번만 즉시 실행됩니다.
AllMessageRetriever의 코드입니다. 기본적으로 테이블을 반복하고 외부 API를 호출하여 데이터를 가져온 다음이를 테이블로 업데이트합니다. 내가 초기화 파일
require 'socialcast'
module AllMessageRetriever
@queue = :message_queue
def self.perform()
Watchedgroup.all.each do |group|
puts "Running group #{group.name}"
continueLoading=true
page=1
per_page=500
while(continueLoading == true)
User.first.refresh_token_if_expired
token = User.first.token
puts "ContinueLoading: #{continueLoading}"
@test = Socialcast.get_all_messages(group.name,token,page,per_page)
messagesArray = ActiveSupport::JSON.decode(@test)["messages"]
puts "Message Count: #{messagesArray.count}"
if messagesArray.count == 0
puts 'count is zero now'
continueLoading = false
else
messagesArray.each do |message|
if not Message.exists?(message["id"])
Message.create_with_socialcast(message, group.id)
else
Message.update_with_socialcast(message)
end
end
end
page += 1
end
Resqueaudit.create({:watchedgroup_id => group.id,:timecompleted => DateTime.now})
end
# Do anything here, like access models, etc
puts "Doing my job"
end
end
안녕하세요 @RichPeck 나는 작업자 클래스의 코드를 추가했습니다. 나는 이제 Rake 작업에 추가했으며 정상적으로 작동합니다. 즉 한 번만. 하지만 유일한 문제는 수동으로 작업을 호출해야하며 자동으로 수행되지 않는다는 것입니다. – ganeshran
이것은 좋은 소식입니다. 작업의 초기화 프로그램을 만들 수 있습니까? 마찬가지로 '''# config/initializers/messages.rb Rake :: Task [ "your : task"]. invoke''' –