あなたは物事を台無しにしているようです。Thor一般に、強力なCLIラッパーです。CLI自体は一般的にシングルスレッドです。
2つのオプションがあります。異なる子孫を作成して異なるスレッド/プロセスとして実行するか、スレッド/プロセスが実行されるまで待機するようThorに強制するか(推奨)、またはハッキングします(最後にアンパサンドに注意してください)。openjekyll startsystem("jekyll --server 4000 --auto &")
後者は機能しますが、サーバーの起動を制御する必要があります(かなりの時間がかかる場合があります)。これを実現するための2番目の醜いハックは、以下に依存することsleepです。
say("Start Server\n\t")
system("jekyll --server 4000 --auto &")
say("Wait for Server\n\t")
system("sleep 3")
say("Open Site\n\t")
system("open http://localhost:4000")
Upd:何を生み出したいか想像するのは難しいです。スクリプトの終了後にjekyllサーバーを実行したままにしたい場合は、次のようにします。
desc "openServer", "Start the Jekyll Server"
def openServer
system "clear"
say "\n\t"
say "Starting Server…\n\t"
r, w = IO.pipe
# Jekyll will print it’s running status to STDERR
pid = Process.spawn("jekyll --server 4000 --auto", :err=>w)
w.close
say "Spawned with pid=#{pid}"
rr = ''
while (rr += r.sysread(1024)) do
break if rr.include?('WEBrick::HTTPServer#start')
end
Process.detach(pid) # !!! Leave the jekyll running
say "Open Site\n\t"
system "open http://localhost:4000"
end
ページを開いた後にjekyllをシャットダウンする場合は、への呼び出しopenもその呼び出しを生成する必要がありますProcess.waitpid。