質問: Windows Server(2008R2)上で、「batファイルをダブルクリックしたら、Githubからpullしてrailsのサーバーを起動しなおす」というバッチを書く必要があります。Windowsのbatファイルははじめて書きます。 やったこと: このように書きました。 ``` cd path/to/project git pull origin master bundle exec rake assets:precompile RAILS_ENV=production bundle exec rake db:migrate RAILS_ENV=production bundle exec rails s -e production... ``` (実際には、Railsのサーバーを一旦終了するコマンドも調べて追加する必要があります) サーバーのパフォーマンスが悪いので、bundle execのコマンドには数十秒~数分かかります。 現象: これをダブルクリックすると、3行目のプリコンパイルが終わった瞬間にコマンドプロンプトのウィンドウが閉じてしまいます。 個別に全く同じコマンドを実行しても正しく実行されるため、bat特有の問題と考えています。 調べたこと: ネットで調べたのですが、こういう場合はコマンドにかかる時間を予測してtimeoutするのがいいと書いてありました。また、別のbatに分けてcallする?という方法もありました。 timeoutする方法だと時間を計ったりせねばならずスマートではないかと思うのですが、こういう場合はどのようなやり方にするのがいいのでしょうか。シェルスクリプトのようにいかないため困っています。
回答: `bundle`は、`bundle.bat`というバッチファイルですね。 バッチファイルの中から、他のバッチファイルを呼び出して、その後元のバッチファイルの続きをするためには、`call bundle ~`としてください。 `call`を書かないと goto 的な意味になります。