2012-02-23 9 views
4

私は、これについて新しい質問を開くだけで、私が詩に助けを求めていることを改善することを決めました。クライアントが私のRailsアプリケーションにフォームを提出してcronジョブが実行され、cronジョブの時間がドロップダウンメニューからユーザによって選択される方法を知っていれば、私は以下を達成できると信じています。これを行う方法はありますか、私はアイディアを探していますが、見つけていません。クライアントがフォームを送信して、Cronジョブを作成しました。

旧質問

私は、ユーザーが自分のサイトに動画をアップロードし、それが一定の時間で再生持つことができるようになるシステムを開発しようとしています。ムービーは連続的にストリーミングされるので、1時間後のある特定の時間に、キュー内の次のムービーが再生されます。私はすでにこれを行う宝石やスクリプトがあるのだろうか?それをやり遂げる最善の方法は何か、私はcronや遅延仕事のような仕事でそれをやろうと思っていましたが、これを行うのが最も効率的な方法ではないと思います。アドバイスをいただければ幸いです。

P.S.私はそれを説明する簡単な方法は、YouTube上で再生するビデオを並べることができますので、レールで似たようなことをすることができます、これは私の問題に役立つだろう。

答えて

2

再生の正確な時間をユーザーが決定する場合は、rufus-scheduler gemを使用できます。そのようなユーザから取得し、あなたの時間で

プラグ:

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

あなたsome_methodは、いくつかのJSを実行しますユーザーのブラウザにメッセージを送信しますJuggernautようsocket.ioラッパー、と連携して仕事ができますビデオを取り出して再生します。

これでできることは基本的にブラウザウィンドウを開いたままで座っていて、スケジュールされた時間に達すると、ブラウザは適切なビデオを取り出して再生します。

ビデオキューイングシステムを実装する必要がある場合は、ユーザーがIDで目的のビデオをキューイングできるようにするだけで、コールバック関数を使用してキューの次のビデオを呼び出すことができます。ビデオが終了しました。コールバックは、キュー内の次のビデオをデータベースに照会し、ビデオをフェッチして再生します。

+0

私はそれがうまくいけない場合は私が探している最高の包括的なモデルかもしれないように聞こえる私は確かにここで他のソリューションを試してみましょう。 – eWizardII

1

フロントエンドのスケジューリングのためにバックグラウンドを行う必要があるとは思われません。 JuggernautやCron Jobの仕事に行く必要はありません。

これはすべてJavaScriptを使用して簡単に達成できます。 javascriptのsetTimeout()およびclearTimeout()関数を使用するか、ajax呼び出しの前にsleep()を追加することができます。ここ

は、手順は次のとおりです。

  1. あなたが最初の映画か、単にページをロードします。
  2. setTimeout関数内でajax呼び出しを行います。 注:clearTimeout(the_variable)を実行できるように、変数にsetTimeout()を割り当てることを忘れないでください。ここ は、詳細な使用方法である:のsetTimeout(javascript_statement、ミリ秒単位)として働いていたsetTimeout http://www.w3schools.com/js/js_timing.asp
  3. ...これらミリ秒与える現在の時刻から減算ユーザーによって設定されています現在のムービーまたは何時間の合計時間でなければなりません再生するミリ秒が残っています。
  4. このajaxリクエストで現在のムービーIDを送信します。サーバー上では、送信された最後のムービーをこのムービーIDパラメータでフェッチして、ムービーが再生された後に再生されるムービーを計算できます。
  5. また、現在のムービーが終了したときに次のムービーだけを再生するような機能が必要だとも思っています。したがって、基本的には、Ajax呼び出しをmovie-players関数で行うためのsetTimeout()関数を置き換えることもできます。ムービープレーヤーが現在のムービーの再生を完了すると、サーバーへのajaxコールを行います。リクエスト中の現在のムービーIDを再度送信します。
  6. 現在のムービーの完了後であっても、ムービーを開始するのに適切な時間を待つ場合は、periodic_call_remoteを使用して、設定された秒数後にajaxリクエストを送信する必要があります。
  7. サーバー上で、つまりコントローラでAjaxリクエストを処理する場合は、今度はムービーを表示する必要があることを確認したら、プレーヤを含む部分と自動再生によるnewmovieへのリンクを置き換えます-on-loadをtrueに設定します。
1

非常に普及しているWheneverは、スケジュールされたタスクに大きく依存するプロジェクトで使用されています。これは、crontab形式に対処する代わりに、スケジュールされたタスクを定義する素晴らしいDSLを提供します。 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 

上記のクエリでは、ユーザー定義のパラメータを入れてください。それでおしまい。

関連する問題