How to set up a staging environment on Google App Engine

空扰寡人 提交于 2019-11-26 18:55:08

问题


Having properly configured a Development server and a Production server, I would like to set up a Staging environment on Google App Engine useful to test new developed versions live before deploying them to production.

I know two different approaches:

A. The first option is by modifying the app.yaml version parameter.

version: app-staging

What I don't like of this approach is that Production data is polluted with my staging tests because (correct me if I'm wrong):

  1. Staging version and Production version share the same Datastore
  2. Staging version and Production version share the same logs

Regarding the first point, I don't know if it could be "fixed" using the new namespaces python API.

B. The second option is by modifying the app.yaml application parameter

application: foonamestaging

with this approach, I would create a second application totally independent from the Production version.
The only drawback I see is that I'm forced to configure a second application (administrators set up).
With a backup\restore tool like Gaebar this solution works well too.

What kind of approach are you using to set up a staging environment for your web application?
Also, do you have any automated script to change the yaml before deploying?


回答1:


I chose the second option in my set-up, because it was the quickest solution, and I didn't make any script to change the application-parameter on deployment yet.

But the way I see it now, option A is a cleaner solution. You can with a couple of code lines switch the datastore namespace based on the version, which you can get dynamically from the environmental variable CURRENT_VERSION_ID as documented here: http://code.google.com/appengine/docs/python/runtime.html#The_Environment




回答2:


If separate datastore is required, option B looks cleaner solution for me because:

  1. You can keep versions feature for real versioning of production applications.
  2. You can keep versions feature for traffic splitting.
  3. You can keep namespaces feature for multi-tenancy.
  4. You can easily copy entities from one app to another. It's not so easy between namespaces.
  5. Few APIs still don't support namespaces.
  6. For teams with multiple developers, you can grant upload to production permission for a single person.



回答3:


We went with the option B. And I think it is better in general as it isolates the projects completely. So for example playing around with some of the configurations on the staging server will not affect and wont compromise security or cause any other butterfly effect in your production environment.

As for the deployment script, you can have any application name you want in your app.yaml. Some dummy/dev name and when you deploy, just use an -A parameter:

appcfg.py -A your-app-name update .

That will simplify your deploy script quite much, no need to string replace or anything similar in your app.yaml




回答4:


We use option B.

In addition to Zygmantas suggestions about the benefits of separating dev from prod at application level, we also use our dev application to test performance.

Normally the dev instance runs without much available in the way of resources, this helps to see where the application "feels" slow. We can then also independently tweak the performance settings to see what makes a difference (e.g. front-end instance class).

Of course sometimes we need to bite the bullet and tweak & watch on live. But it's nice to have the other application to play with.

Still use namespaces and versions, just dev is dirty and experimental.




回答5:


I prefer option A and I'm trying to set up a simple build script to automatise to process



来源:https://stackoverflow.com/questions/3793860/how-to-set-up-a-staging-environment-on-google-app-engine

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!