Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>One option is to use the javascript version of Less and hence do the less-to-css conversion in the browser.. simply upload your less formatted file (see <a href="http://lesscss.org/" rel="nofollow">http://lesscss.org/</a> for details).</p> <p>Alternately, I do the conversion (first with less, now I use sass) in a deploy script which does a number of things</p> <ul> <li>checks that my source code control has no outstanding files checked out (uncommited changes)</li> <li>joins and minifies my .js code (and runs jslint over it) into a single file</li> <li>generates other content (including stamping the source code control version as a version number into certain key files and as a parameter on some files to avoid caching issues) so my main page pulls in scripts with URLs such as "allmysource.js?v=585".. the file might be static but the added params force cache invalidation </li> <li>calls appcfg to perform the upload <em>and checks the return code</em></li> <li>makes some calls to the real site with wget to check the previously generated files are actually returned, by checking they're stamped with the expected version </li> <li>applies another source code control tag to say that the intended version was successfully deployed </li> </ul> <p>My script also accepts a "-preview" flag in which case it doesn't actually do the upload, but reports the version control comments for what's changed since the previous deployment.</p> <pre><code>me@here $ ./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 </code></pre> <p>This is pretty handy as a reminder of what I need to put in things like a changelog</p> <p>I plan to also expand it so that I can, as part of my source code control, add any code that needs running once only when deployed (eg database schema changes) and know that it'll be automatically run when I next deploy a new version.</p> <p>Essence of the script below as people asked... it doesn't show my "check code, generate, join, and minify" as that's another script... I realise that the original question was asking about that step of course :) but you can see where you'd add the call to generate CSS etc</p> <pre><code>#!/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" &amp;&amp; "$lastver" -ne "$lastlog" ]]; then echo "Changes since the changelog was last updated" echo "$LOG_NOTES" echo fi if [[ "$IGNORE_BZR" == "0" &amp;&amp; $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 -'" </code></pre> <p>It's not particularly big or clever, but it automates the upload job </p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload