I have just completed a migration from a master/slave to HRD. During this migration I was forced to change my app name from myapp.appspot.com to myapp-hrd.appspot.com. I have set up an alias so my users can still use the old site url.
But I find it rather messy to have two apps where the one just forward requests to the other.
Is there any way I can migrate my new myapp-hrd back to myapp?
The only way I can think of is to erase my old myapp and then migrate from myapp-hrd to it, but it takes 3 days to delete an GAE app. And 3 days downtime is not an option. I have to keep myapp running since the url is hardcoded in a lot of android phones.
Even if you delete your old app, you won't be able to create a new app with the same identifier. Did you use the migration tool? If so, the new application should now be serving both the new and old app URLs. Otherwise, I recommend you report a production issue so that someone from Google links the apps manually.
Related
I've recently done a UI update for my website, the backend is all identical. I want to access the latest deploy (with the no-promote flag) from 'beta.my-website.com' but still access the 'normal' site from 'my-website.com'. Ideally this would dynamically serve the latest version, but if not could I set it statically to the URL with project ID? I have bought my domain from 123reg. Is there a way to direct to the latest version regardless of it's traffic serving status?
TL;DR Can you set up a 'beta' site at beta.mywebsite.com while still being able to access the live version on www.mywebsite.com on google cloud?
Any help would be greatly appreciated.
Thanks!
I don't think that can be done like that.
You could deploy to a different appengine project by putting a different project id and then have beta.mywebsite.com route to that project instead. The nice thing about this option is everything else would be isolated (i.e. no chance of your beta changes causing bad data in your production database, or tasks in your queues)
Another option would be to deploy to a different service within your project and use your dispatch.yaml to route beta.mywebsite.com to it https://cloud.google.com/appengine/docs/standard/python3/reference/dispatch-yaml
A third option would be to put beta as your version-id, and have your DNS redirect beta.mywebsite.com to beta-dot-your_project_id.appspot.com. However, when the user goes to beta.mywebsite.com they would ultimately see beta-dot-your_project_id.appspot.com in the URL bar. Also, when you're ready to go live, you would want to redeploy and promote that new version id and not promote the beta version-id.
I am migrating my app to HRD manually (I know there is a the tool for that).
At the end of the migration process I need to route all the domains that are connected to the old app-id to the new app-id (I don't want to redirect).
I know this is done automatically at the end of the migration (when using google's tool)
I want to make an alias myself (manually)
I think there used to be an option in the application settings panel but I can't find it now.
Is there a way to add an application alias?
Thanks
The only way I found is to contact google support.
They are the only ones who can do it...
I'd like to disable user access to my app so that I can perform a schema migration. I've looked into a few possibilities and found possible shortcomings:
Disable datastore writes - I'd rather just bring my whole application down so that people do not see any errors, etc. Also, I assume disabling writes will prevent me from performing the migration.
Disable the application - It's not clear to me that this would disable it only for my users, leaving me unable to perform the migration. I am also unsure of the disable/enable turnaround time.
Redirect my domain name to a temporary page - my app would still be accessible on appspot.com
Upload a new version of my app that doesn't respond to requests other than to direct to a "temporarily down" page.
Any suggestions?
Suggestion number 4 seems like probably the best way to do this. Some frameworks have a "maintenance mode" in which all incoming requests would be redirected to a page indicating the site is down due to maintenance. If your framework doesn't support such a mode, you can just upload a new version of your app (maybe call the version maintenance) and switch to that as your new default version. This version could be an empty app in which all incoming requests are turned to a "maintenance page" indicating the site is down for maintenance. Then manually go to the version of your app with the migration code and execute it (http://<version>.<appname>.appspot.com). Switch your apps default version to the new version with the new schema when you're done with the migration.
Explanation of your other ideas
Disabling writes would prevent even you from making writes on the application. I believe this was more meant for migrating from one app to another or other applications of "freezing" the datastore.
Disable the application would bring the app down entirely
Redirecting your domain would inflict a DNS lag on your migration, something that can take 48 hours to fully propagate each way (switching to the temporary page, then switching back to the new version)
As aforementioned, IMHO this would be the best way to do it.
Is it not possible to use both schema's, and use a new version of your app to migrate, which only uses the new schema. In this way you can always fall back to your old version.
By the way. Because the datastore is schema-less, It was always possible for me to change the "schema", without bringing the app down.
Go to GCP > App engine > Settings > Disable application.
You can sure enable your application ay any time.
If you disable this app, a few things will happen:
The app will stop serving
All data and state will be saved
Billing charges will still incur when applicable
Your task queues will continue to run. They can be paused in the Cloud Tasks UI
I am developing an app locally in Google App Engine. I have built a small datastore for development purposes. Rebuilding it after every power cycle on my Mac got tedious so I made it permanent. Now I run my app locally with the following command:
/usr/local/bin/dev_appserver.py "--datastore_path=./permanent.datastore" appengine_prototype
Life is good. I have decided to deploy my app so I can test http post commands from a different machine. When I tried to register my current application id (example), I found that it was unavailable (shocker!). So I registered a different application id and planned to change my local application id to match. However, when I changed the
application: *app-id*
line in my app.yaml file, my app stopped recognizing my permanent datastore.
So, how can I change my application id to the one I registered, maintain the connection to the permanent datastore and then push the whole shebang online? I tried running the app twice locally, first with the permanent datastore referenced in the command and then without, hoping that the default temporary datastore would inherit from the previous permanent datastore. That didn't work. Do I need to start by copying the permanent datastore to the default temporary datastore? How would I do that? Any help would be much appreciated.
Thanks,
Dessie
If your intention is to eventually push your local data to your live environment anyway, then your best bet is to:
use bulkloader.py to backup your local data (while using oldid in your config)
then change your config to your newid
then use bulkloader.py to push your data to your new development server (ran with --datastore_path=./permanent.datastore2 or something)
then use bulkloader.py to push your data to the GAE production server
Details of bulkloader.py can be found in the docs and an example here
I don't want to waste any more of my 10 appspot.com subdomains for test projects. Is there an elegant way to have multiple appengine apps, each to its own folder, e.g. xx.appspot.com/myapp1, xx.appspot.com/myapp2? I want the configuration to be identical or very close to the actual deployment configuration at a subdomain's root.
Just ask for more apps. Google would rather give you more apps than have you work around the limit. See here
What you could maybe do is (ab-)use the different versions for completely different projects. In this case you do not have to change anything in web.xml.
http://1.latest.xx.appspot.com for myapp1
http://2.latest.xx.appspot.com for myapp2
They do share the same datastore and memcache and task queues, but you would have the same situation with separating the paths. And if the table names do not collide, that should not be a problem.
You do get different admin consoles (log viewers etc) for each version.
You could always create a new Google account and get 10 new apps, right?
You could use dummy Google accounts for your test projects, and add your original Google account as a developer to a project you decide to actively work on... That way your original Google account doesn't get "polluted" by test projects.