2010-12-07 16 views
4

私はApp Engineを使用しています。次のプロジェクトでLESS CSS拡張機能を使用することを考えています。 Pythonで書かれた良いLESS CSSライブラリはありませんので、元のRubyのものをそのまま使ってみました。開発サーバーを実行する前とファイルをクラウドにアップロードする前に、App Engineにlessc ./templates/css/style.lessを実行させてください。これを自動化する最良の方法は何ですか?私が思っている:App Engine:更新/実行時にスクリプトを起動する

#run.sh: 
lessc ./templates/css/style.less 
.gae/dev_appserver.py --use_sqlite . 

そして

#deploy.sh 
lessc ./templates/css/style.less 
.gae/appcfg.py update . 

私は正しい道にAMまたは多分appcfg.pyレベルで、物事のよりエレガントな方法は何ですか?

ありがとうございました。

+1

私は本当に簡単な方法はないと思います。私は同様の方法を使用しますが、Googleクローズコンパイラを使用しています。 – fredrik

+1

あなたはhttp://sass-lang.com/を見ることもできます。これはあなたの開発中にライブで行います。だからあなたはすでにコンパクトなCSSをアップロードすることができます。 – fredrik

答えて

2

1つのオプションは、LessのJavaScriptバージョンを使用することです。したがって、ブラウザでless-to-css変換を行います。フォーマットされていないファイルを単純にアップロードします(詳細はhttp://lesscss.org/を参照)。

代わりに、私は物事私のソースコード管理は、未解決のファイルがコミットされていない(チェックアウトされていない

  • チェックの数をしてデプロイスクリプトで(今私はSASSを初めて使用少ないと、)変換を行います変更)
  • 私の.jsコードを結合して(その上にjslintを実行して)1つのファイルにします。
  • は、ソースコードコントロールバージョンを特定のキーファイルにバージョン番号としてスタンプするいくつかのファイルはキャッシュの問題を避けるために)私のメインページは、 "allmysour ce.js?V = 585" ..ファイルは静的であるかもしれないが、追加のparams力キャッシュの無効化が
  • 呼び出しがアップロードを実行するためにAppCfgを使用してチェックするリターンコード
  • はwgetを持つ本物のサイトにいくつかの呼び出しを行いますそれらが予想されるバージョン
  • 意図したバージョンが正常に

私のスクリプトはまた、「受け入れを配備したと言うことは、別のソースコード管理タグを適用して刻印しているチェックすることで、以前に生成されたファイルが実際に返されるチェックします-preview "フラグを指定します。この場合、実際にはアップロードは行われませんが、v前回のデプロイメント以降に変更された内容についてのコメント制御コメント。

[email protected] $ ./deploy -preview 
Deployment preview... 
Would deploy v596 to the production site (currently v593, previously v587) 
    594  Fix blah blah blah for X Y Z 
    595  New feature nah nah nah 
    596  Update help pages 

これは私が、私は、私のソースコード管理の一環として、いずれかを追加できるようにもして展開する予定のchangelog

のようなものに入れて必要なもののリマインダとしてはかなり便利ですデプロイされたとき(データベーススキーマの変更など)に一度だけ実行する必要があり、次に新しいバージョンをデプロイするときに自動的に実行されることがわかっているコード。

以下のスクリプトの本質は尋ねられました...私の "チェックコード、生成、結合、および縮小"は表示されません。これは、特に大きなまたは巧妙ではないのですが、それはアップロードジョブを自動化する

#!/bin/sh 

function abort() { 
    echo 
    echo "ERROR: $1" 
    echo "$2" 
    exit 99 
} 

function warn() { 
    echo 
    echo "WARNING: $1" 
    echo "$2" 
} 

# Overrides the Gentoo eselect mechanism to force the python version the GAE scripts expect 
export EPYTHON=python2.5 

# names of tags used to label bzr versions  
CURR_DTAG=deployed 
PREV_DTAG=prevDeployed 

# command line options 
PREVIEW=0 
IGNORE_BZR=0 

# These next few vars are set to values to identify my site, insert your own values here... 
APPID=your_gae_appid_here 
ADMIN_EMAIL=your_admin_email_address_here 
SRCDIR=directory_to_deploy 
CHECK_URL=url_of_page_to_retrive_that_does_upload_initialisation 

for ARG; do 
    if [[ "$ARG" == "-preview" ]]; then 
     echo "Deployment preview..." 
     PREVIEW=1 
    fi 
    if [[ "$ARG" == "-force" ]]; then 
     echo "Ignoring the fact some files may not be committed to bzr..." 
     IGNORE_BZR=1 
    fi 
done 
echo 

# check bzr for uncommited changed  
BSTATUS=`bzr status` 
if [[ "$BSTATUS" != "" ]]; then 
    if [[ "$IGNORE_BZR" == "0" ]]; then 
     abort "There are uncommited changes - commit/revert/ignore all files before deploying" "$BSTATUS" 
    else 
     warn "There are uncommited changes" "$BSTATUS" 
    fi 
fi 

# get version of numbers of last deployed etc 
currver=`bzr log -l1 --line    | sed -e 's/: .*//'` 
lastver=`bzr log -rtag:${CURR_DTAG} --line | sed -e 's/: .*//'` 
prevver=`bzr log -rtag:${PREV_DTAG} --line | sed -e 's/: .*//'` 
lastlog=`bzr log -l 1 --line gae/changelog | sed -e 's/: .*//'` 

RELEASE_NOTES=`bzr log --short --forward -r $lastver..$currver \ 
    | perl -ne '$ver = $1 if /^ {0,4}(\d+) /; print " $ver $_" if ($ver and /^ {5,}\w/)' \ 
    | grep -v "^ *$lastver "` 

LOG_NOTES=`bzr log --short --forward -r $lastlog..$currver \ 
    | perl -ne '$ver = $1 if /^ {0,4}(\d+) /; print " $ver $_" if ($ver and /^ {5,}\w/)' \ 
    | grep -v "^ *$lastlog "` 

# Crude but old habit - BUGBUGBUG is a marker in the code for things to be fixed before deployment 
echo "Checking code for outstanding issues before deployment" 
BUGSTATUS=`grep BUGBUGBUG js/*js` 
if [[ "$BUGSTATUS" != "" ]]; then 
    if [[ "$IGNORE_BZR" == "0" ]]; then 
     abort "There are outstanding BUGBUGBUGs - fix them before deploying" "$BUGSTATUS" 
    else 
     warn "There are outstanding BUGBUGBUGs" "$BUGSTATUS" 
    fi 
fi 

echo 
echo "Deploy v$currver to the production site (currently v$lastver, previously v$prevver)" 
echo "$RELEASE_NOTES" 
echo 

if [[ "$currver" -gt "$lastlog" && "$lastver" -ne "$lastlog" ]]; then 
    echo "Changes since the changelog was last updated" 
    echo "$LOG_NOTES" 
    echo 
fi 

if [[ "$IGNORE_BZR" == "0" && $lastver -ge $currver ]]; then 
    abort "There don't appear to be any changes to deploy..." 
fi 

if [[ "$PREVIEW" == "1" ]]; then 
    exit 0 
fi 

$EPYTHON -c "import ssl" \ 
    || abort "$EPYTHON can't find ssl module for $EPYTHON - download it from pypi and install with the inbuilt setup.py" 

# REMOVED - call to my script that calls jslint, generates files and compresses JS etc 
# || abort "Generation of code failed" 

/opt/google_appengine/appcfg.py --email=$ADMIN_EMAIL -v -A $APPID update $SRCDIR \ 
    || abort "Appcfg failed - upload presumably incomplete" 

# move the tags to show we deployed properly 
bzr tag -r $lastver --force ${PREV_DTAG} 
bzr tag -r $currver --force ${CURR_DTAG} 

echo 
echo "Production site updated from v$lastver to v$currver (in turn from v$prevver)" 
echo 
echo "Now visiting $CHECK_URL to upload the source to the database" 

# new version doesn't seem to always be there (may be caching by the webserver etc) to be uploaded into the database.. try again just in case 
for cb in $RANDOM $RANDOM $RANDOM $RANDOM ; do 
    prodver=`wget $CHECK_URL?_cb=$cb -q -O - | perl -ne 'print $1 if /^\s*Rev #(\d+)\s*$/'` 
    if [[ "$currver" == "$prodver" ]]; then 
     echo "OK: New version $prodver successfully deployed" 
     exit 0 
    fi 
    echo "Retrying the upload of source to the database" 
    sleep 5 
done 
abort "The new source doesn't seem to be loading into the database" "Try 'wget $CHECK_URL?_cb=$RANDOM -q -O -'" 

を私は元の質問はもちろん、そのステップについて尋ねたことを実現:)しかし、あなたはCSSを生成するための呼び出しを追加したいどこなど

見ることができます

+0

Tim、あなたのスクリプトはインスピレーションのためにどこかで入手できますか? – Emilien

+0

上記のスクリプトにスクリプトを追加しました。役立つことを願っています。 – Tim

関連する問題