Если ваша главная задача - каждую минуту загружать среду rails для запуска скрипта, я бы предложил mailgun вместе с некоторыми альтернативами cron.
Я использую комбинацию bluepill + часовой механизм + delayed_job , чтобы справиться с этим. У меня есть нестандартные задания, написание которых так же просто, как Delayed::Job.enqueue MyJob.new
. Логика фиксируется в методе задания perform
, который помогает минимизировать зависимости, если они есть.
часовой механизм используется для постановки в очередь отложенных заданий, загружая только минимальные зависимости, сохраняя минимальный объем памяти.
bluepill используется для отслеживания задержанных рабочих и часового процесса и запуска их резервных копий в случае сбоя или перезапуска в случае выхода из-под контроля.
Общее использование памяти: 20 МБ (bluepill) + 25 МБ (часовой механизм) + 80-90 МБ (задержанный рабочий)
Пример часового механизма.рб:
ENV['RAILS_ENV'] ||= "development"
ENV['RACK_ENV'] = ENV['RAILS_ENV']
require 'clockwork'
require 'mongoid'
require 'delayed_job'
require 'delayed_job_mongoid'
include Clockwork
base_directory = File.absolute_path(File.dirname(__FILE__))
require File.join(base_directory, "../jobs/fetch_comments_job.rb")
require File.join(base_directory, "../jobs/news_letter_job.rb")
Mongoid.load!(File.join(base_directory, "../config/mongoid.yml"))
every(1.minute, "pop.comments") { Delayed::Job.enqueue FetchCommentsJob.new}
every(1.day, "send.newsletter", :at => '22:30') { Delayed::Job.enqueue NewsLetterJob.new}