せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

【Ruby】【bat】”デプロイ前の確認バッチ” の作り方

 
雨やだなー。
おしゃれが出来ないよ!

 

デプロイ前の確認バッチ

自分のサイトはアニメーションが流れるつくりだけれど、
開発時にいちいち見ているのは面倒。

でも「anime.js」をコメントアウトすることで、
アニメ終了後からの表示が出来てとても楽チン。

だけど問題がひとつ。

 
ユーザーの体験向上のためのローディング画面を追加したことによって、
デバッグ中はこのローディングdiv要素もコメントアウトしないといけなくなった。


 
つまり、開発中にコメントアウトするところが2箇所。

<div id="loadingWrap">...loading</div>
<script src="js/anime.js" type="text/javascript"></script>

 
これは、デプロイのときコメントアウトを直し忘れてデプロイしちゃう可能盛大!
っていうか一回やっちゃったし。

ププ。


 
ということでデプロイ&デプロイ前確認 を行うバッチファイルを作成することで、
コメントアウトの直し忘れを防ぎます。


 

コード

バッチファイル

@ECHO OFF
ruby push_deploy.rb
IF %ERRORLEVEL%==1 (
pause
exit
)
FOR /F "delims=" %%a IN (mail.properties) DO (
   set MAIL=%%a
)
C:/google_appengine/appcfg.py --email=%MAIL% update C:/repositories/sekai-in-the-box
ポイント

・エラー発生時(ERRORLEVELが1)の処理の振り分け
・プロパティファイルの読み込み
・バッチのif文(バッチファイル書いたのたぶん初めてでよく分からんかった)


バッチでRubyスクリプトを実行する場合、
Ruby実行中に例外が発生した場合は、ERRORLEVELが1になる。


 

Rubyファイル

バッチコマンドで呼び出すRubyファイル

#check comment out
index_file_path = File.dirname(__FILE__) + File::Separator + "com" + File::Separator + "index.php"
File.readlines(index_file_path).each do |line|
  next if line.index("loadingWrap").nil? &&  line.index("anime.js").nil?
  raise "don't forget comment out" if line.index("<!--")
end

 

ポイント

IO#readlinesメソッドでArrayオブジェクトが返るので、
eachを使って行数少なく書ける。


 

実行結果

エラーだとこんな感じで処理が止まる
f:id:sekaiya:20131020182839j:plain


 
これで大丈夫ー。