Я в настоящее время пишу приложение, которое вытягивает новую информацию из источников RSS и должно обновить те источники RSS в определенной частоте. В настоящее время я вытягиваю только, когда пользователь запрашивает канал, но я хочу изменить то поведение на автоматическую периодическую выборку.
Я писал сценарий оболочки, который будет взаимодействовать с базой данных и периодически начинает через крон - но это - большое двойное усилие, таким образом, я задавался вопросом, каковы будут "направляющие Путь" или "Ruby Путь", чтобы сделать это. Я использую Ubuntu, Apache и Пассажира. Можно ли предложить лучшие методы, которые, возможно, даже включены в приложение, таким образом, я могу легко развернуть приложение на другой машине, не имея необходимость смешиваться с кроном?
Статические переменные и статические методы привязаны к классу, а не к экземпляру класса.
Статические методы не должны содержать «состояния». Все, что связано с состоянием, должно быть связано с созданным объектом, а не с классом.
-121--936363-Я бы предложил сделать что-то вроде задачи грабли и использовать всякий раз, когда драгоценный камень , чтобы создать вашу cron-работу, чтобы запустить задачу грабли.
Проверьте, http://railscasts.com/episodes/164-cron-in-ruby , для получения дополнительной информации о драгоценном камне whenver.
Основное преимущество всякий раз, когда драгоценный камень , заключается в том, что он сохраняет ваши требования к приложению (т.е. задание cron, выполняемое каждые x часов в приложении) внутри вашего приложения, повышая портативность вашего приложения.
Я рекомендую комбинацию двух выше. Вы хотите задание на граблях, даже если у вас уже создан прямой метод. Это связано с тем самым вещами администратора сервера, которые вы хотели бы запустить в CRON, вы также можете иногда захотеть запускаться из командной строки, и это то, для чего хороши задачи граблей.
Всякий раз, когда плагин звучит круто, хотя я не могу поручиться за это. Конечно, приятно знать, как делать вещи с нуля, затем используйте плагины, чтобы облегчить вашу жизнь. Вот с нуля.
Создайте новый файл, lib / tasks / admin.rake
Внутри, создайте саму задачу:
namespace :admin
desc "Updates all RSS feeds"
task :rss => :environment do
RssFeed.update_all
end
end
Это предполагает, что у вас есть класс RSSFEED, а метод update_all делает то, что вы ожидаете. Вы можете назвать это из командной строки:
rake admin:rss
, и вы можете добавить это в CRON (позвонив Crontab -L
как веб-пользователь) и добавление этой строки:
10 0 * * * cd /path/to/rails/app && rake RAILS_ENV=production admin:rss
Существуют различные решения. Для простейшей установки вы можете использовать скрипт/раннер
в кронтабе что-то вроде:
10 0 * * * /home/myuser/myproject/script/runner -e production ModelName.methodname
Имя метода должно быть статическим методом на вашей модели. Вы должны ссылаться на проект по полному пути, иначе он, скорее всего, не будет найден в окружении cron. Проверьте вашу man-страницу crontab
для получения информации о синтаксисе crontab, если вы не знакомы с ним. Вышеуказанное, например, запускает скрипт на 10-й минуте 0-го часа каждого дня (короче говоря, в 12:10 утра).
Если вам нужно более мощное решение, вы можете использовать BackgroundRB. BackgroundRB запускает демона и поддерживает задачи, которые планируют, и может помещать результаты в базу данных. У них даже есть простой протокол связи, позволяющий вашим веб-процессам запрашивать выполнение задачи, а затем иметь возможность получить результат. Это позволяет вам контролировать фоновые задания прямо из веб-интерфейса, а не из кронтаба, который просто "случается".
Для работы BackroundRB требуется немного больше настроек, но, возможно, это того стоит, если заданиями нужно управлять.
Для небольших команд и личных проектов, всякий раз, когда GEM отлично. Но если у вашей компании команда OPS отдельно от команды разработки, она может не быть идеальной.
На моей последней работе команда OPS должна была видеть, как Cron мы устанавливаем, чтобы они могли быть уверены, что у него не будет никаких побочных эффектов для системы. Так что решение DSL не собирается работать. Но мы (разработчики) хотели, чтобы скрипты CRON в управлении версиями.
Так что для компромисса мы проверили текстовые файлы с RAW CRON, аналогичны этому:
10 0 * * * cd /path/to/rails/app && rake RAILS_ENV=production admin:rss
, и мы добавили шаг к сценарию CaPistrano, который установил это в Crontab в рамках части развертывания.
Попробуйте использовать всякий раз, когда . EventHouge в конце его создаст CRON, но определение планирования будет записано в вашем приложении с использованием RUBY DSL.