This is my routes.py:
# -*- coding: utf-8 -*-
# creates a dictionary that will map each domain with its own app,
# based on the content of a text file called "domains_apps", and also
# a list of all the apps installed
domains = {}
apps = []
_archivo = open('domains_apps', 'r')
_lineas = _archivo.readlines()
_archivo.close()
for _linea in _lineas:
domain, app = _linea.strip().split('!')
domains[domain] = app
if not app in apps:
apps.append(app)
routers = dict(\
BASE = dict(\
default_controller = 'default', \
default_function = 'index', \
domains = domains, \
root_static = ['robots.txt'], \
map_static = True, \
exclusive_domain = True, \
)\
)
routes_onerror = []
for app in apps:
for code in ['403', '404', '500', '503']:
routes_onerror.append((r'%s/%s' %(app, code), r'/%s/static/%s.html'
%(app, code)))
routes_onerror.append((r'%s/*' %app, r'/%s/static/500.html' %app))
The file "domains_apps" looks like this:
adn979.com!adn
panel.adn979.com!adn_panel
blogdemedios.com.ar!blogmedios
panel.blogdemedios.com.ar!blogmedios_panel
demo.medios.com.ar!demo
panel.demo.medios.com.ar!demo_panel
diarioprimicia.com.ar!diarioprimicia
panel.diarioprimicia.com.ar!diarioprimicia_panel
Notice each domain has its own app associated.
This web2py instance is running ~600 apps (that is, 600 copies of the same
app).
Do you see something odd here?
In the meantime, I'll verify that all the apps referened in "domains_apps"
file are in deed installed apps.
El lunes, 3 de septiembre de 2018, 11:40:22 (UTC-3), Anthony escribió:
>
> What does your routes.py file look like?
>
> On Monday, September 3, 2018 at 10:25:22 AM UTC-4, Lisandro wrote:
>>
>> This problem is getting weirder.
>>
>> I've found that passing integer numbers as args to URL() helper isn't a
>> problem for web2py.
>> I could successfully run some examples using integer and long integers as
>> URL args, and it always works ok.
>> In fact, as I stated before, my application uses URL in that way since a
>> long time ago, with no errors.
>> Even more: in the apps where the code fails, it only fails when it is run
>> from the scheduler, but it works ok if it is run from the controllers.
>> But, just to remember, it doesn't fail in all the apps, only in some of
>> them. But the apps are all the same, it's the same app installed several
>> times.
>>
>>
>> A quick resume:
>>
>> This sentence:
>> URL('default', f=f, args=[contenido.id, contenido.slug], extension='',
>> scheme=True, host=current.CONFIG.dominio)
>>
>>
>> * from a controller, it always runs ok.
>> * from the scheduler, it fails in some applications.
>>
>> The error points to gluon/rewrite.py:
>>
>> File "applications/pescaregional/modules/virtual_methods.py", line 248,
>> in contenido_url return URL(c='default', f=f, args=[contenido.id,
>> contenido.slug], extension='', scheme=True,host=current.CONFIG.dominio)
>> if f else None
>> File "/var/www/medios/gluon/html.py", line 391, in URL args, other,
>> scheme, host, port, language=language)
>> File "/var/www/medios/gluon/rewrite.py", line 197, in url_out function,
>> args, other, scheme, host, port, language)
>> File "/var/www/medios/gluon/rewrite.py", line 1366, in map_url_out return
>> map.acf()
>> File "/var/www/medios/gluon/rewrite.py", line 1292, in acf self.omit_acf
>> () # try to omit a/c/f
>> File "/var/www/medios/gluon/rewrite.py", line 1241, in omit_acf if self.
>> args[0] in self.functions or self.args[0] in self.controllers or self.
>> args[0] in applications: TypeError: 'in ' requires stringas left operand,
>> not long
>>
>>
>> I'm a bit lost.
>> Where else should I look?
>>
>>
>> El lunes, 3 de septiembre de 2018, 1:45:49 (UTC-3), Lisandro escribió:
>>>
>>> Thanks for that fast response.
>>> If the cause of the problem is passing "contenido.id" as int, then the
>>> error is even more weird, because my app uses URL like that in several
>>> situations, for example:
>>>
>>> URL('contenido', 'editar', args=contenido.id)
>>> URL('categoria', 'editar', args=categoria.id)
>>> URL('default', 'index', args=[categoria.id, page_number])
>>>
>>>
>>> Now that I think it, the error that I reported happens within the
>>> scheduler environment.
>>> Could that difference be the reason? Well, even in that case, it
>>> wouldn't explain why it works ok in other apps.
>>>
>>>
>>>
>>>
>>> El lunes, 3 de septiembre de 2018, 1:25:19 (UTC-3), fiubarc escribió:
>>>>
>>>> Hello,
>>>>
>>>> I think it's more a matter of python language, contenido.id is long type
>>>> then self.args[0] in 'any string' raise an exception because, as the
>>>> message says :
>>>>
>>>> 'in ' requires string as left operand, not long
>>>>
>>>> You can do args=['%s' % contenido.id, .... or args=[str(contenido.id),
>>>> ....
>>>>
>>>> Dont know why in others installed apps works, is really weird
>>>>
>>>>
>>>>
>>>> El lunes, 3 de septiembre de 2018, 0:54:32 (UTC-3), Lisandro escribió:
>>>>>
>>>>> I have the same app installed several times within a web2py instance
>>>>> (running version 2.16.1-stable+timestamp.2017.11.14.05.54.25).
>>>>>
>>>>> In some of them, this sentence:
>>>>>
>>>>> URL(c='default', f=f, args=[contenido.id, contenido.slug], extension=
>>>>> '', scheme=True, host=current.CONFIG.dominio)
>>>>>
>>>>> ... throws this traceback error:
>>>>>
>>>>> Traceback (most recent call last):
>>>>> File "/var/www/medios/gluon/scheduler.py", line 501, in executor
>>>>> result = dumps(_function(*args, **vars))
>>>>> File "applications/pescaregional/compiled/models.db.py", line 519, in
>>>>> newsletter
>>>>> File "applications/pescaregional/modules/globales.py", line 938, in
>>>>> enviar_newsletter 'url_noticia': noticia.url() + utm_vars,
>>>>> File "/var/www/medios/gluon/packages/dal/pydal/objects.py", line 2407,
>>>>> in __call__ return self.method(self.row, *args, **kwargs)
>>>>> File "applications/pescaregional/compiled/models.db.py", line 295, in
>>>>> File "applications/pescaregional/modules/virtual_methods.py", line 248
>>>>> , in contenido_url return URL(c='default', f=f, args=[contenido.id,
>>>>> contenido.slug], extension='', scheme=True, host=current.CONFIG.
>>>>> dominio) if f else None
>>>>> File "/var/www/medios/gluon/html.py", line 391, in URL args, other,
>>>>> scheme, host, port, language=language)
>>>>> File "/var/www/medios/gluon/rewrite.py", line 197, in url_out function
>>>>> , args, other, scheme, host, port, language)
>>>>> File "/var/www/medios/gluon/rewrite.py", line 1366, in map_url_out
>>>>> return map.acf()
>>>>> File "/var/www/medios/gluon/rewrite.py", line 1292, in acf self.
>>>>> omit_acf() # try to omit a/c/f
>>>>> File "/var/www/medios/gluon/rewrite.py", line 1241, in omit_acf if
>>>>> self.args[0] in self.functions or self.args[0] in self.controllers or
>>>>> self.args[0] in applications: TypeError: 'in ' requires string as
>>>>> left operand, not long
>>>>>
>>>>>
>>>>>
>>>>> The problem is solved changing the sentence with this:
>>>>>
>>>>> URL(c='default', f=f, args=['%s' % contenido.id, '%s' % contenido.slug
>>>>> ], extension='', scheme=True, host=current.CONFIG.dominio)
>>>>>
>>>>> ... notice that the args are converted to strings.
>>>>>
>>>>> But the weird part is that *the error only happens in some of the
>>>>> installed apps; and, remember, it's the exact same app installed several
>>>>> times*.
>>>>>
>>>>> First I thought it had something to do with the values stored at
>>>>> "contenido", which is a row from a table. But it happens with any row.
>>>>>
>>>>> I'm using PostgreSQL 9.3. I've checked the databases' enconding and
>>>>> they all have the same one. I also checked the "contenido" table
>>>>> definition
>>>>> in a couple of dbs (one corresponding to an app that presents the error,
>>>>> and other that doesn't), and they are exactly the same.
>>>>>
>>>>> What could be the difference that makes gluon/rewrite.py throw the
>>>>> error in some of the apps?
>>>>>
>>>>
--
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/d/optout.