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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/web2py/ca14b0fb-9ffa-4ab2-a15a-ee59b8ef8ebb%40googlegroups.com.