Proposal - use the value of an environment variable as a path_prefix
When using the parametric router there is an option called `path_prefix`
that's
described as "a path fragment that is prefixed to all outgoing URLs and
stripped
from all incoming URLs". I'm not sure what the original use case was for
this option
but the "path fragment" is a static value, a string that's added to BASE in
routes.py
like so:
routers = dict(
...
BASE=dict(
...
path_prefix='PATH_FRAGMENT', # or even 'PATH/FRAGMENT'
...
),
)
This allows things like 'http://domain-name.tld/PATH_FRAGMENT/a/c/f'
In my use case I wanted the simplicity of the parametric router but I
needed to be
able to pass in the path fragment on the incoming URL so that it could
change and
still be "prefixed to all outgoing URLs and stripped from all incoming
URLs", or
possibly not even exist at all.
I made some changes to gluon/rewrite.py to allow the value of an
environment variable
to be used as the path fragment if it exists. To use it I prefix the string
assigned
to `path_prefix` with a '$' like this:
routers = dict(
...
BASE=dict(
...
path_prefix='$MY_ENV_VARIABLE',
...
),
)
Leaving off the '$' causes `path_prefix` to work normally.
Then in the server config I use a rewrite rule and get the path fragment
via a
regex and create the environment variable. The following is an apache
rewrite rule,
but this could be nginx etc as well. This rule gets anything starting with
an
underscore (e.g. http://domain-name.tld/_MY_VALUE).
RewriteRule ^/(_[^/]+) - [E=MY_ENV_VARIABLE:$1]
After that we have an environment variable with 'MY_ENV_VARIABLE' as its
key and
'_MY_VALUE' as its value.
Basically the changes I made to gluon/rewrite.py allow the value of that
environment
variable to be used as the path fragment allowing you to change it by
passing in a new
path fragment on the URL and it acts just like the original `path_prefix`
option.
In my use case I'm planning to use the "path fragment" for multi-tenancy.
Maybe there
is a better way to do this using the pattern based router and I just didn't
see it.
I wanted to toss this onto the list and get some feedback, and if there is
an easier
way, be shown the light :)
--
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].
For more options, visit https://groups.google.com/groups/opt_out.