Отправленная клиентом форма для создания задания Cron на Rails - PullRequest
3 голосов
/ 23 февраля 2012

Хорошо, я решил улучшить то, что я прошу о помощи со стихом, просто открыв новый вопрос по этому вопросу.Я полагаю, что смогу выполнить нижеприведенное, если знаю, как, когда клиент отправляет форму в моем приложении Rails, запускается задание cron, где пользователь выбирает время выполнения задания cron из раскрывающегося меню.Есть ли способ сделать это, я искал идеи, но не нашел их.

Старый вопрос

Я пытаюсь разработать систему, котораяпозволит пользователю загрузить фильм на мой сайт, а затем воспроизвести его в определенное время.Фильмы будут передаваться непрерывно, так что через определенное время, скажем, через час, будет проигрываться следующий фильм в очереди.Мне интересно, есть ли гем или скрипт, который уже делает это?Или как лучше всего это делать, я думал, что делать это с такими задачами, как cron или отложенная работа, но я не думаю, что это самый эффективный способ сделать это.Буду признателен за любой совет.

ps Я думаю, что более простой способ объяснить это - на YouTube вы можете ставить в очередь видео для воспроизведения, так что можно было бы сделать что-то похожее на рельсах, это поможет решить мою проблему.

Ответы [ 3 ]

2 голосов
/ 25 февраля 2012

Если пользователь сам определит точное время воспроизведения, вы можете использовать гем rufus-scheduler .

Подключите ваше время, полученное от пользователя, примерно так:

scheduler = Rufus::Scheduler.start_new
scheduler.at @user_defined_time do
   some_method
end

Ваш some_method может работать в тандеме с socket.io оболочкой, подобной Juggernaut , которая будет отправлять сообщение в браузер пользователя, который будет выполнять JS, который будет вызывать видео и воспроизвести его.

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

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

1 голос
/ 03 марта 2012

Я использовал чрезвычайно популярный Всякий раз, когда в проектах, которые сильно зависят от запланированных задач, и это здорово.Это дает вам хороший DSL для определения ваших запланированных задач вместо того, чтобы иметь дело с форматом crontab.Из README:

Whenever is a Ruby gem that provides a clear syntax for writing and deploying cron jobs.

Пример из README:

every 3.hours do
  runner "MyModel.some_process"       
  rake "my:rake:task"                 
  command "/usr/bin/my_great_command"
end

every 1.day, :at => '4:30 am' do 
  runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
end

Поместите пользовательские параметры в запрос выше.вот и все.

1 голос
/ 01 марта 2012

Я не верю, что вам даже нужно делать фоновые вещи только для внешнего планирования.Не нужно даже идти на Джаггернаут или какую-нибудь работу с Cron Job.

Все это может быть просто достигнуто с помощью JavaScript.Вы можете использовать функции javascript setTimeout () и clearTimeout () или добавить функцию sleep () перед вызовом ajax.

Вот шаги:

  1. Вы загружаете первый фильм илитолько страница.
  2. Сделайте ajax-вызов в функции setTimeout.Примечание: не забудьте присвоить setTimeout () переменной, чтобы вы могли выполнять clearTimeout (the_variable).вот подробное использование: http://www.w3schools.com/js/js_timing.asp
  3. setTimeout работает как setTimeout (javascript_statement, миллисекунды) ... эти миллисекунды должны быть общим временем текущего фильма или любым другим временем, которое устанавливается пользователем, вычитаемым изтекущее время, которое дает вам миллисекунды для воспроизведения.
  4. Отправьте идентификатор текущего фильма в этом запросе ajax, чтобы на сервере можно было рассчитать, какой фильм должен быть воспроизведен после только что воспроизведенного фильма ... путем извлеченияпоследний фильм, который воспроизводится с помощью этого параметра идентификатора отправленного фильма.
  5. Я также считаю, что вам потребуются некоторые функции, например, воспроизводить следующий фильм только после окончания текущего фильма.Таким образом, вы также можете заменить функцию setTimeout () для вызова Ajax функцией видеоплееров.Просто сделайте ajax-вызов на сервер, когда проигрыватель фильма завершит воспроизведение текущего фильма ... снова отправив текущий идентификатор фильма в запросе.
  6. Если даже после завершения текущего фильма вы хотите подождатьв течение подходящего времени, чтобы запустить фильм, вам нужно использовать periodically_call_remote, который отправляет запросы ajax через заданное количество секунд.
  7. И один раз на сервере, то есть в вашем контроллере, где вы обрабатываете этот запрос ajax,Как только вы убедитесь, что вам нужно показать фильм сейчас, просто замените контейнер плеера на частичное, содержащее плеер и ссылку на newmovie с autoplay-on-load, установленным в true.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...