2012-05-04 4 views
3

rake taskの中でスレッドを起動し、タスクが完了したらトレッドを強制終了します。独立したスレッドでサーバーを実行し、タスクが完了したらスレッドを強制終了するためのレイクタスク?

私はを書いて、ジキルのサイトをテストしています。私は、サーバーを起動し、いくつかの他のタスクを実行し、タスクが完了したらスレッドを破棄したいと思います。

task :test_site do 
    `ejekyll --server` 
    `git -Xdn` 
    if agree("Clean all ignored files?") 
    git -Xdf 
    end 
end 

残念ながらjekyll --serverを停止するには、私が知っている唯一の方法は、ctrl cを使用することです。ここで私はこれまで持っているものです。私はjekyll --serverをレイクタスクを終了しないマナーで停止する方法を聞いて嬉しいですが、スレッドとレーキのタスクについて質問されているので、ちょうどコメントしてください。

答えて

3

お望みですProcess.spawnです。これは新しいプロセスであり、既存のプロセス内の実行スレッドではありません。あなたはPIDを取得するので、ちょうどProcess.kill(:QUIT, pid)か、スポーンされた処理済みのものを殺すために使用したい方法を送信してください。 ejekyllがフォアグラウンドで実行するコマンドラインオプションを持っている場合

pid = Process.spawn(
    "ejekyll", "--server", 
    out: "/dev/null", 
    err: "/dev/null" 
) 

# you may need to add a short sleep() here 

# other stuff 

Process.kill(:QUIT, pid) && Process.wait 

、それはあなたがそれを識別するために、そのPIDファイルを保存する場所を知っている必要があり、それ以外の場合、自己daemonizes場合、それを使用する方が良いだろうとデーモンを殺す。

関連する問題