LINUX.ORG.RU

RoR как замена cron

 


0

1

Есть сайт на RoR, есть скрипт на ruby который должен запускаться например каждые пол часа. Через крон делать не хочется потому, что хочу использовать для скрипта модели из RoR и хочу, что бы при остановке RoR скрипт тоже переставал запускаться. Как такое можно сделать?

★★★★★

Последнее исправление: CYB3R (всего исправлений: 1)

Например так https://github.com/defunkt/resque
Но самое простое что приходит в голову это сделать такую модель:

class Job
  def self.start
    Thread.new{
      loop{
        #task
        sleep 10
      }
    }
  end
end

#далее в application.rb
module YourApp
  class Application < Rails::Application
    #бла-бла-бла...
    config.after_initialize do
      Job::start
    end
  end
end

special-k ★★★
()

Через крон делать не хочется потому, что хочу использовать для скрипта модели из RoR

rails runner 'Model.your_action'

хочу, что бы при остановке RoR скрипт тоже переставал запускаться

проверяй pid файл в Rails.root.join('tmp/pids')

одна строчка кода

kelyar ★★★★★
()

require 'activemodel' в свой скрипт и используй модели в нём.

tyler19
()
Ответ на: комментарий от special-k

Например так https://github.com/defunkt/resque

Помойму это немного другое, там упор на кучу заданий которые ставятся в очередь и выполняются в фоне. Или я неправильно понял описание.

Но самое простое что приходит в голову это сделать такую модель:

Тоже думал над этим, но неуверен, рельсы в один процесс работают в продакшене или в несколько? Если в несколько то он нити на каждый процесс запускать будет.

TDrive ★★★★★
() автор топика
Ответ на: комментарий от kelyar

проверяй pid файл в Rails.root.join('tmp/pids')

По суте получится, что скрипт продолжит работать но будет выключаться если рельсы не запущены, както это костыльно.

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

Ну курлом. Ничего особо костыльного нету, плюс соблюдается требование неработоспособности скрипта при опущенных рельсах.

thesis ★★★★★
()

См. первый ответ в этом треде. Resque - не советую, ибо на единичных задачах - тормоз. Юзай https://github.com/tobi/delayed_job для простых задач оно полегче.

iBliss
()
Ответ на: комментарий от thesis

Ничего особо костыльного нету

Хрена себе нету... «Шура, вас из какого класса церковно-приходской школы выгнали за неуспеваемость?»

iBliss
()
Ответ на: комментарий от iBliss

Чувак, рассуждай проще. Если для решения простейшей задачи надо переть на гитхаб за велосипедом, то решение костыльное. Если не надо - решение не-костыльное.
Ты улавливаешь нить?

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: комментарий от thesis

Если для решения простейшей задачи надо переть на гитхаб

Вообще-то это гем.

Ты улавливаешь нить?

Нет, но я тоже хочу такую траву.

iBliss
()
Ответ на: комментарий от iBliss

Нет, но я тоже хочу такую траву.

Аа. Ну это многое объясняет.

thesis ★★★★★
()
Ответ на: комментарий от thesis

Дерганье curl-ом подходит только если задача выполняется за пару секунд, иначе будет занимать один процесс рельсов, или нужно будет в контроллере делать нить.

TDrive ★★★★★
() автор топика
Ответ на: комментарий от thesis

Если для решения простейшей задачи надо переть на гитхаб за велосипедом

Гемы это не способ велосипедить, а способ использовать хорошо отлаженную готовую, заточенную под задачу библиотеку. Когда показывают ссылку на гитхаб на гем, то это не отсылают качать что-то с гитхаба, а просто показывают название, место где можно прочитать краткое описание, найти документацию и, если непременно надо, откуда поставить альфу. Нормальный же способ поставить гем, это набрать gem install gemname.

Что касается озвученной задачи, то как раз курлом из крона дёргать, это кривой велосипед, а использование одного из специально заточенных под это дело гема - нет. По нескольким причинам. Например потому, что запуск задачи по расписанию, совсем не означает необходимость создания для этого веб-интерфейса. Или, например потому, что в автоматизацию деплоя добавление таска ложится органично и хорошо, а правка кронтаба - нет.

Reaper ★★
()
Ответ на: комментарий от Reaper

Нормальный же способ поставить гем, это набрать gem install gemname.

Я в курсе, спасибо.

Гемы это не способ велосипедить, а способ использовать хорошо отлаженную готовую, заточенную под задачу библиотеку.

А кто гарантирует нормальность и отлаженность этой библиотеки?

Например потому, что запуск задачи по расписанию, совсем не означает необходимость создания для этого веб-интерфейса.

Что значит «необходимость создания веб-интерфейса»?
Я действительно не понимаю, что плохого в том, чтобы дернуть веб-клиентом рельсовое приложение, получить 200 ОК и успокоиться.

в автоматизацию деплоя добавление таска ложится органично и хорошо, а правка кронтаба - нет.

Тут согласен, это аргумент.

thesis ★★★★★
()
Ответ на: комментарий от Reaper

Гемы которые тут советовали то же будут запускаться в количестве равном процессам RoR?

TDrive ★★★★★
() автор топика
Ответ на: комментарий от thesis

Что значит «необходимость создания веб-интерфейса»?

В контексте ответа, это урл торчащий наружу, который дёргает крон.

А кто гарантирует нормальность и отлаженность этой библиотеки?

Её популярность. Resque/Delayed job озвученные в треде - известные, используемые большим количеством людей гемы.

Reaper ★★
()
Ответ на: комментарий от TDrive

Гемы которые тут советовали то же будут запускаться в количестве равном процессам RoR?

Нет, настраиваешь количество процессов-воркеров.

Reaper ★★
()
Ответ на: комментарий от thesis

Я действительно не понимаю, что плохого в том, чтобы дернуть веб-клиентом рельсовое приложение, получить 200 ОК и успокоиться.

Ну, помимо сказанного про деплой, про урл торчащий наружу, соображение такое: рельсы офигенны свой сложившейся инфраструктурой: нужны рспеки - ставишь гем, нужен недефолтный веб-сервер - ставишь гем, надо картинки аплоадить - гем, надо текст редактировать визивигом - гем, надо цветную консольку - гем, надо логинку - гем, надо права - гем и т.д., заменять отлаженные гемы на часто используемых всеми задачах на что-то своё, которое ещё и плохо автоматизируется на деплое - идея не очень. Задачи по расписанию - одна из задач о которых надо знать про существующие гемы, на мой взгляд.

Reaper ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.