google-app-engine


Maintaining separate environments with no downtime on update in app engine


I have been tweaking my environment in Google's App Engine to have several instances of my app for testing and production. However I am uncertain if the intended use of versions applies here.
App background:
- Node.js express app configured on app engine, using Cloud sql.
- 2 modules:
- - default/main - front end code code and API
- - workers - separate app that has a variety of workers
- Redis to keep track of the queue, kue.js for implementation
I was under the impression that I could use versions here, so that I keep only 2 modules, my default one and a workers module. Each will then have 2 versions, staging and production. The commands to push each one would then be:
gcloud preview app deploy --version staging --no-promote
gcloud preview app deploy --version production --promote --no-stop-previous-version
That is all separated well, and perhaps the intended use of versions. However, what I can't achieve with this is no downtime. What seems to happen is that the old machine is tore down then the new one build up, resulting in 3-4 minutes of down time during deploys. As opposed to keeping the old until the new is finished and then just rerouting. Note, the production version in this case should always have 100% of the traffic.
What I found to work well is to keep a module for each version, so I end up with 4 modules (default, default-staging, workers, workers-staging) and no real versions specified during deploys. When deploying with this, there is no downtime, but old versions are kept running:
gcloud preview app deploy --promote
I have a helper script to delete all versions that get 0% of the traffic. Is this the correct approach for setting up separate environments? Just looking for some feedback in case I am missing something obvious.

Related Links

Resolving an invalid memory address or nil pointer dereference
Design suggestion for an app which will wake up periodically and execute some long running tasks
Properly using map[string]interface{}?
Multiple calls to put() method when updating ndb on google app engine
GAE Can't set up a Resident Instance, related to new Migrate Settings option?
Google App Engine - Querying for arrays containing a value
Java App engine backend shuts down abruptly, how to resume work?
Google Plus Domains Api HTTP Request - add people fails
Get entities containing specific value - objectify
Google AppEngine ClientId and Client Secrets
Which SDK Version Does Appengine Use in Production
can not figure out relation between yaml and main page handler in google app engine
NoClassDefFoundError when adding new font in iText on AppEngine
Facebook login in Google Cloud Endpoints
To share a local host for go gae?
App-engine: JAX-RS with Jersey no working

Categories

HOME
phpword
flex
knitr
boto3
bing-maps
sendgrid-api-v3
commonjs
plist
siddhi
mxgraph
jxl
docx
android-7.0-nougat
jersey-1.0
rubymotion
named-entity-recognition
ckfinder
dapper-extensions
fat
licensing
rpgle
ceylon
instantiation
classcastexception
verifiable-c
stringtokenizer
android-ibeacon
microsoft-metro
apache-spark-dataset
phpdbg
vaadin-elements
nanoc
proget
openblas
x-ray
aquamacs
appdomain
edit
dt
reshape
pure-css
redistributable
microstation
latin
qtplugin
tinkerpop3
burrows-wheeler-transform
rspec2
qiime
stream-processing
mediametadataretriever
libav
halcon
invoke-sqlcmd
highland.js
themoviedb-api
iokit
file-move
coda
visual-sourcesafe-2005
omnifaces
nsurlsessiondatatask
qtwebengine
document-repository
build-script
maven-scm
getopt
scrypt
ice-cube
cocoalibspotify-2.0
epiceditor
dolby-audio-api
fragmenttransaction
apache-whirr
node-redis
screen-size
metaweblog
office-2007
eclipse-marketplace
opml

Resources

Encrypt Message