2012-02-23 97 views
4

好吧,我決定改進我所要求的幫助,只是在這個問題上開一個新的問題。如果我知道當客戶端在我的Rails應用程序上提交表單時,運行cron作業,用戶從下拉菜單中選擇cron作業的時間,我相信我可以完成以下任務。有沒有辦法做到這一點,我一直在尋找想法,但沒有找到一個。客戶提交的表格在Rails上創建一個Cron作業

老問題

我試圖開發一個系統,允許用戶將電影上傳到我的網站,然後把它以一定的時間播放。電影將不斷流媒體,以便在一個小時後的某個時間,隊列中的下一部電影將播放。我想知道是否有一個寶石或腳本已經這樣做?或者做什麼最好的方法是什麼,我認爲是用cron或延遲工作這樣的工作來做,但我認爲這不是最有效的方法。任何意見,將不勝感激。

p.s.我認爲一個簡單的解釋是,在YouTube上你可以排隊播放視頻,所以我們可以在軌道上做類似的事情,這有助於解決我的問題。

回答

2

如果用戶決定播放的確切時間,您可以使用rufus-scheduler寶石。在你的時間

插頭從用戶像這樣獲得的:

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

some_method可以協同工作,與socket.io包裝像Juggernaut,這將消息發送到用戶的瀏覽器,它會執行一些JS那會獲取視頻並播放它。

你可以用這個做的事情基本上是打開你的瀏覽器窗口,當達到預定時間時,瀏覽器會獲取合適的視頻並播放它。

如果你需要實現一個視頻排隊系統,你可以讓用戶按照ID排隊他們想要的視頻,然後通過回調函數的方式調用隊列中的下一個視頻。視頻已結束。回調將查詢數據庫中隊列中的下一個視頻,獲取視頻並播放它。

+0

謝謝,這聽起來像它可能是我尋找的最好的綜合模型,如果它不工作我肯定會嘗試其他解決方案在這裏。 – eWizardII 2012-03-04 06:23:09

1

我不相信你甚至需要做前臺調度的背景資料。 甚至不需要爲劍聖或任何克倫工作thingy。

這一切都可以簡單地通過使用JavaScript來實現。 您可以使用javascript的setTimeout()和clearTimeout()函數,或者在ajax調用之前添加sleep()。

這裏的步驟:

  1. 您加載的第一部電影或只是網頁。
  2. 在setTimeout函數內調用ajax。 注意:不要忘記將setTimeout()分配給一個變量,以便您可以執行clearTimeout(the_variable)。 這是詳細的用法:http://www.w3schools.com/js/js_timing.asp
  3. setTimeout作爲setTimeout(javascript_statement,毫秒)...這些毫秒應該是當前電影的總時間或用戶設置的任何時間從當前時間減去你剩下的毫秒數將被播放。
  4. 在此ajax請求中發送當前電影ID,以便在服務器上可以計算在電影剛剛播放後要播放哪部電影......通過提取使用此發送的電影ID參數播放的最後一部電影。
  5. 我也相信你會需要一些功能,比如只播放當前電影結束後的下一部電影。所以基本上你也可以用setTimeout()函數來替代使用電影播放器​​功能的Ajax調用。當電影播放器​​完成播放當前電影時,只需向服務器發送ajax調用...再次發送請求中的當前電影標識。
  6. 如果即使在完成當前電影之後,您想等待適當的時間來啓動電影,您需要使用periodic_call_remote,它會在設定的秒數後發送ajax請求。
  7. 一旦在服務器上,即在您的控制器中,您處理該ajax請求,一旦您確定您需要現在顯示電影,只需用包含播放器的部分和帶有自動播放功能的newmovie鏈接替換播放器容器-on-load設置爲true。
1

我對那些嚴重依賴計劃任務的項目使用了非常流行的Whenever,這很好。它給你一個很好的DSL來定義你的計劃任務,而不必處理crontab格式。從自述:

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

實施例從自述:

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 

在上面的查詢將您的用戶定義的參數。而已。