Да, это возможно. Вы можете использовать задачу для вызова с помощью команды rake
. Ваша задача может быть что-то вроде этого:
# lib/tasks/cron.rake
namespace :cron do
desc "Send account emails"
task deliver_emails: :environment do
accounts_for_delivery = Account.where(condition: true)
# ... whatever logic you need
accounts_for_delivery.each do |account|
Postman.personalized_email_for(account).deliver
end
end
end
И ваша почтовая программа и соответствующий вид может выглядеть следующим образом:
# app/mailers/postman.rb
class Postman < ActionMailer::Base
def personalized_email_for(account)
@account = account
mail to: account.email
end
end
# app/views/postman/personalized_email_for.text.haml
= @account.inspect
Теперь вы можете установить кронтаб запустить задачу грабли так же, как вы выполняете задачи rake
. Я рекомендую вам использовать whenever драгоценный камень, который действительно обеспечивает хороший способ определить cronjobs для вашего приложения, которое выглядит следующим образом:
# config/schedule.rb
every 6.hours do
rake 'cron:deliver_email'
end
Так что теперь определение cronjob связаны приложения. Он хорошо работает с Capistrano
между развертываниями. Вы также можете передавать переменные в свою задачу или выполнять системные команды.
Очень простые и прямые направления. Спасибо! Отлично работает для меня ... – prodigerati