红宝石和铁轨新手。我正在研究我的第一个应用程序,该应用程序将解析托管在另一台服务器上的XML的信息(我能够通过net / http执行此操作)。然后我需要能够在加载应用程序的根目录时将解析后的数据保存到我的sqlite数据库中,因为我需要访问它。
我不完全确定我应该在何处启动解析并立即将其保存到我的数据库中,以便在根页面加载后立即将其提供。这是否应该全部放在指向我的根索引的控制器中(或者应该由模型在某处处理)?
如果有更好/更快/更有效的方式来立即访问和保存这些数据(与解析相反,查看数据库中的信息是否是最新的,如果没有则保存),那么我将不胜感激任何建议。
谢谢!
答案 0 :(得分:0)
您需要使用delayed_jobs https://github.com/collectiveidea/delayed_job 在初始化文件夹文件夹中,创建一个看起来像这样的文件(这是我的)
Delayed::Worker.destroy_failed_jobs = false
Delayed::Worker.sleep_delay = 2
Delayed::Worker.max_run_time = 5.minutes
Delayed::Worker.read_ahead = 10
Delayed::Worker.default_queue_name = 'default'
if Delayed::Worker.delay_jobs
begin
ScheduledWorker.new.schedule
rescue => e
Rails.logger.info e; Honeybadger.notify e
end
end
Class ScheduledWorker
NEXT_RUN_AT = lambda { Chronic.parse("next saturday") }
MAX_ATTEMPTS = 1
def max_attempts
MAX_ATTEMPTS
end
def process
end
def after
self.schedule unless Rails.env.test?
end
def schedule
self.class.new.delay(run_at: NEXT_RUN_AT.call).process unless exists?
end
private
def exists?
Delayed::Job.where("handler like '%#{self.class.name}%'").where(locked_at: nil, failed_at: nil).exists?
end
end