There are two problems here: 1) you cannot symlink in an action because it must be done once and only once. 2) You cannot have paths like /_default because they are absolute paths
Assuming this is a linux or OSX machine you should do from the shell $ rm -rf apps/_default $ ln -s apps/myapp apps/_default You only need to do this once. On Monday, 23 March 2020 05:01:41 UTC-7, Jacinto Parga wrote: > > Yes, but I get an error with symlink in __init.py__ of _default: > > from py4web import action, __version__ > import os > > @action("index") > @action.uses("index.html") > def index(): > src = "/_default" > dst = "/myapp" > os.symlink(src, dst) > return dict(version=__version__) > > > Error Ticket: [Errno 13] Permission denied: '/_default' -> '/myapp' > > Traceback (most recent call last): > File "/home/jacinto/PROGRAMACION/py4web/py4web/core.py", line 554, in > wrapper > ret = func(*func_args, **func_kwargs) > File "/home/jacinto/PROGRAMACION/py4web/py4web/core.py", line 515, in > wrapper > ret = func(*args, **kwargs) > File "apps/_default/__init__.py", line 10, in index > os.symlink(src, dst) > PermissionError: [Errno 13] Permission denied: '/_default' -> '/myapp' > > id 48 > uuid 8b97b87a-7ec0-4158-bace-e414438f513a > app_name _default > method GET > path / > timestamp datetime.datetime(2020, 3, 23, 11, 48, 18) > client_ip 127.0.0.1 > error [Errno 13] Permission denied: '/_default' -> '/myapp' > snapshot > timestamp 2020-03-23T11:48:18.745672 > python_version 3.7.5 (default, Nov 20 2019, 09:21:52) > > > > > > > El sábado, 21 de marzo de 2020, 8:03:00 (UTC+1), Massimo Di Pierro > escribió: >> >> This is a good solution. One trick is to symlink _default to myapp >> >> On Monday, 16 March 2020 02:17:56 UTC-7, Jacinto Parga wrote: >>> >>> Finally solved. >>> >>> 1. I add an entrypoint to the app.yaml . The app runs fine: >>> runtime: python37 >>> entrypoint: gunicorn -b :8080 -w 2 main:app >>> >>> >>> # Handlers define how to route requests to your application. >>> handlers: >>> >>> - url: /.* >>> secure: always >>> redirect_http_response_code: 301 >>> script: auto >>> >>> 2. I get rid off all the apps but the default app and the app I want >>> to deploy in the .gcloudignore: >>> # This file specifies files that are *not* uploaded to Google Cloud >>> Platform >>> # using gcloud. It follows the same syntax as .gitignore, with the >>> addition of >>> # "#!include" directives (which insert the entries of the given >>> .gitignore-style >>> # file at that point). >>> # >>> # For more information, run: >>> # $ gcloud topic gcloudignore >>> # >>> .gcloudignore >>> # If you would like to upload your .git directory, .gitignore file >>> or files >>> # from your .gitignore file, remove the corresponding line >>> # below: >>> .git >>> .gitignore >>> >>> # Python pycache: >>> __pycache__/ >>> # Ignored by the build system >>> /setup.cfg >>> >>> .travis.yml >>> *.pyc >>> *.pyo >>> *~ >>> #* >>> *.1 >>> *.bak >>> *.bak2 >>> *.svn >>> *.w2p >>> *.class >>> *.rej >>> *.orig >>> Thumbs.db >>> .DS_Store >>> ./deposit >>> ./benchmark >>> ./build >>> ./dist >>> ./ssl >>> ./docs >>> ./logs >>> ./*.zip >>> # Only ignore the default app and the app we want to deploy >>> env/* >>> env/ >>> !apps/* >>> apps/todo >>> apps/todo/* >>> apps/examples >>> apps/examples/* >>> apps/_dashboard >>> apps/_dashboard/* >>> apps/_scaffold >>> apps/_scaffold/* >>> apps/_minimal >>> apps/_minimal/* >>> !apps/_default >>> !apps/_default/* >>> !apps/myapp >>> !apps/myapp/* >>> apps/_documentation/* >>> apps/superheroes >>> apps/superheroes/* >>> apps/myfeed >>> apps/myfeed/* >>> apps/*/databases/README* >>> pps/*/databases/* >>> apps/*/uploads/* >>> apps/*/*.py[oc] >>> packages/ >>> deployment_tools/* >>> deployment_tools/ >>> tests/* >>> tests/ >>> README.md >>> test-requirements.txt >>> source-context.json >>> password.txt >>> py4web-start.py >>> setup.py >>> Makefile >>> So when it is deployed in GAE http://myapp.appspot.com/ goes to >>> _default/index.html url >>> 3. I modify the __init.py__ file of the _default app to redirect to >>> myapp folder: >>> from py4web import action, __version__ >>> from bottle import redirect #get redirect function from bottle >>> >>> @action("index") >>> @action.uses("index.html") >>> def index(): >>> redirect("/myapp") # The former code: return >>> dict(version=__version__) >>> The result is that http://myapp.appspot.com/ serves >>> http://myapp.app.com/myapp >>> >>> Maybe there is a more elegant way to get it. Any suggestion would be >>> appreciated. >>> >>> Thanks >>> >>> El martes, 4 de febrero de 2020, 19:46:32 (UTC+1), Jacinto Parga >>> escribió: >>>> >>>> I cannot properly deploy a simple py4web app in GAE. I think it's just >>>> a .gcloudignore or a app.yaml configuration issue. The only thing I've got >>>> is a not found page. >>>> >>>> [image: minimal-py4web.png] >>>> >>>> Some help about how to route the right app in the google app engine? >>>> >>>> Thanks >>>> >>>> >>>> >>>> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/web2py/ca14b0fb-9ffa-4ab2-a15a-ee59b8ef8ebb%40googlegroups.com.