Today, when I try to download large csv archives, with admin, apache
crashed
Well, I added this to httpd.conf
WSGIDaemonProcess web2py user=drayco group=drayco \
home=/home/drayco/webapps/seccion36/web2py \
processes=1 maximum-requests=1000
But even with that, apache crashed equal. Any advice?
On Jun 4, 12:20 am, drayco <[email protected]> wrote:
> Well, I followed the advise of Dr. Massimo, thank's a lot.
>
> I updated all about my applications in web2faction, but a I did all
> manually, because when I used the script for install I can't used
> admin well. (install applications and local_import).
> I am using in my applications mod_wgsi 2.5 and python 2.5
> I configured the httpd.conf with this
>
> ServerRoot "/home/username/webapps/appname/apache2"
>
> LoadModule dir_module modules/mod_dir.so
> LoadModule env_module modules/mod_env.so
> LoadModule setenvif_module modules/mod_setenvif.so
> LoadModule log_config_module modules/mod_log_config.so
> LoadModule mime_module modules/mod_mime.so
> LoadModule rewrite_module modules/mod_rewrite.so
> LoadModule wsgi_module modules/mod_wsgi.so
>
> DirectoryIndex index.py
> DocumentRoot /home/username/webapps/appname/htdocs
> KeepAlive Off
> Listen PORTNUMBER
> LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\"
> \"%{User-Agent}i\"" combined
> CustomLog /home/username/logs/user/access_appname.log combined
> ErrorLog /home/username/logs/user/error_appname.log
> ServerLimit 2
>
> SetEnvIf X-Forwarded-SSL on HTTPS=1
>
> WSGIScriptAlias / /home/username/webapps/appname/web2py/wsgihandler.py
>
> I ran web2py manually one time, and them I ran apache, at this moment,
> everything is done with web2py version 1.78.3 even admin with https.
>
> On Jun 3, 1:48 am, drayco <[email protected]> wrote:
>
> > Very probability, because i very new in web applications and python
>
> > In the past,1 week ago, before we updated version of web2py, we
> > created 10589 registers with the same application. And now, the only
> > idea that i have, it is this, the new version of web2py.
>
> > This are the controllers involved when we created one register
>
> > #Beneficiarios
> > @auth.requires_login()
> > def update_benef(form):
> > import datetime
> > now = datetime.datetime.today()
> > beneficiario = db.benefs2[form.vars.id]
>
> > keybenef=db(db.keys2benefs.keybenef==beneficiario.key_Registro).select()
>
> > db(db.keys2benefs.id==keybenef[0].id).update(benefid=beneficiario.id)
> > coordinador = db.coordinadores[keybenef[0].coordid]
> > fechas =
> > db((db.fechas.fechaTramite>now)&(db.fechas.regional==coordinador.regional)&(db.fechas.full<db.fechas.cargaMax)).select(db.fechas.ALL,orderby=db.fechas.fechaTramite)
>
> > db(db.benefs2.id==beneficiario.id).update(coordid=keybenef[0].coordid)
> > db(db.benefs2.id==beneficiario.id).update(fechasid=fechas[0].id)
> > db(db.fechas.id==fechas[0].id).update(full=fechas[0].full+1)
>
> > #Beneficiarios
> > @auth.requires_login()
> > def update_benef2(form):
> > now = request.now
> > benef = db.benefs2[form.vars.id]
> > keybenef=db(db.keys2benefs.keybenef==benef.key_Registro).select()
> > [0]
> > db(db.keys2benefs.id==keybenef.id).update(benefs2_id=benef.id)
> > coord = db.coordinadores[keybenef.coordinador_id]
> > dates2 =
> > db((db.dates2.start>now)&(db.dates2.regional_id==coord.regional_id)&(db.dates2.xdia>db.dates2.cargados)).
> > \
> > select(db.dates2.ALL,orderby=db.dates2.start)[0]
> > benefs =
> > db(db.benefs2.dates2_id==dates2.id).select(db.benefs2.id,db.benefs2.tramite,db.benefs2.entrega,db.benefs2.tramite.count(),
> > \
> > orderby=db.benefs2.tramite,groupby=db.benefs2.tramite)
> > if len(benefs)>0:
> > if
> > benefs[len(benefs)-1]._extra[db.benefs2.tramite.count()]<dates2.xhora:
> > tramite=benefs[len(benefs)-1].benefs2.tramite
> > entrega=benefs[len(benefs)-1].benefs2.entrega
> > else:
> > from datetime import timedelta
> > HOUR = timedelta(hours=1)
> > tramite=benefs[len(benefs)-1].benefs2.tramite+HOUR
> > entrega=benefs[len(benefs)-1].benefs2.entrega+HOUR
> > else:
> > tramite=dates2.start
> > entrega=dates2.inicio
>
> > db(db.benefs2.id==benef.id).update(dates2_id=dates2.id,tramite=tramite,entrega=entrega,coordnador_id=keybenef.coordinador_id)
> > db(db.dates2.id==dates2.id).update(cargados=dates2.cargados
> > +1,xcargar=dates2.xdia-(dates2.cargados+1))
>
> > @auth.requires_login()
> > def crea_benef():
> > return dict(form=crud.create(db.benefs2, next=URL(r=request,
> > f='benefs2_regist'),onaccept=update_benef2))
>
> > And this when we try to show as a list
>
> > @auth.requires_login()
> > def benefs2_regist():
> > if len(request.args): page=int(request.args[0])
> > else: page=0
> > items_per_page=25
> > limitby=(page*items_per_page,(page+1)*items_per_page+1)
> > benefs=db(db.benefs2.creadoPor==auth.user.id).\
>
> > select(db.benefs2.id,db.benefs2.names,db.benefs2.apelPater,db.benefs2.apelMater,
> > \
> > db.benefs2.tramite,orderby=~db.benefs2.id,limitby=limitby)
> > nobenefs=db(db.benefs2.creadoPor==auth.user.id).count()
> > return
> > dict(beneficiarios=benefs,page=page,items_per_page=items_per_page,nobenefs=nobenefs)
>
> > This are the views involved when we created one register
>
> > {{extend 'layout.html'}}
> > <h3>Registre los datos del Beneficiario y el Trabajador
> > correspondiente</h3>
> > {{=form}}
>
> > {{extend 'layout.html'}}
> > <h3>Usted registro a {{=nobenefs}} Beneficiarios, organizados en
> > bloques de {{=items_per_page}}</h3>
> > <h3>De clic sobre el nombre del beneficiario para ver el lugar, los
> > requisitos, etc. y ver el folio completo para imprimir</h3>
> > <ul>{{for i,benef in enumerate(beneficiarios):}}
> > {{if i==items_per_page: break}}
> > {{=LI(A('Folio ',benef.id,' ',benef.names,'
> > ',benef.apelPater,' ',benef.apelMater,' fecha de
> > tramite:',benef.tramite, _href=URL(r=request, f='show_benef',
> > args=benef.id)))}}
> > {{pass}}</ul>
> > {{if page:}}
> > <a href="{{=URL(r=request,args=[page-1])}}">anteriores</a>
> > {{pass}}
> > {{if len(beneficiarios)>items_per_page:}}
> > <a href="{{=URL(r=request,args=[page+1])}}">siguientes</a>
> > {{pass}}
>
> > On Jun 2, 9:01 pm, mdipierro <[email protected]> wrote:
>
> > > why is counting records "select count(*) ...." crashing your mysql
> > > database? It seems to me the problem is not the web2py version.
>
> > > On Jun 2, 7:03 pm, drayco <[email protected]> wrote:
>
> > > > Thank's a lot Dr. Massimo
>
> > > > do you use apache? Yes
> > > > mod_wsgi? Yes
> > > > do you use the built-in web server? No
> > > > do you see memory leaks? No
> > > > do you have web2py cron or on off? No
>
> > > > This is the firts error:
>
> > > > Traceback (most recent call last):
> > > > File "gluon/restricted.py", line 178, in restricted
> > > > exec ccode in environment
> > > > File "/home/drayco/webapps/seccion36/web2py/applications/init/
> > > > controllers/default.py", line 134, in <module>
> > > > File "gluon/globals.py", line 96, in <lambda>
> > > > self._caller = lambda f: f()
> > > > File "gluon/tools.py", line 2036, in f
> > > > return action(*a, **b)
> > > > File "/home/drayco/webapps/seccion36/web2py/applications/init/
> > > > controllers/default.py", line 101, in crea_benef
> > > > return dict(form=crud.create(db.benefs2, next=URL(r=request,
> > > > f='benefs2_regist'),onaccept=update_benef2))
> > > > File "gluon/tools.py", line 2623, in create
> > > > deletable=False,
> > > > File "gluon/tools.py", line 2567, in update
> > > > onvalidation=onvalidation, keepvalues=keepvalues):
> > > > File "gluon/sqlhtml.py", line 870, in accepts
> > > > onvalidation,
> > > > File "gluon/html.py", line 1328, in accepts
> > > > status = self._traverse(status)
> > > > File "gluon/html.py", line 456, in _traverse
> > > > newstatus = c._traverse(status) and newstatus
> > > > File "gluon/html.py", line 456, in _traverse
> > > > newstatus = c._traverse(status) and newstatus
> > > > File "gluon/html.py", line 456, in _traverse
> > > > newstatus = c._traverse(status) and newstatus
> > > > File "gluon/html.py", line 456, in _traverse
> > > > newstatus = c._traverse(status) and newstatus
> > > > File "gluon/html.py", line 463, in _traverse
> > > > newstatus = self._validate()
> > > > File "gluon/html.py", line 1120, in _validate
> > > > (value, errors) = validator(value)
> > > > File "gluon/validators.py", line 413, in __call__
> > > > if self.dbset(field == value).count():
> > > > File "gluon/sql.py", line 3224, in count
> > > > return self.select('count(*)')[0]._extra['count(*)']
> > > > File "gluon/sql.py", line 3096, in select
> > > > rows = response(query)
> > > > File "gluon/sql.py", line 3091, in response
> > > > db._execute(query)
> > > > File "gluon/sql.py", line 932, in <lambda>
> > > > self._execute = lambda *a, **b: self._cursor.execute(*a, **b)
> > > > File "build/bdist.linux-i686/egg/MySQLdb/cursors.py", line 166, in
> > > > execute
> > > > self.errorhandler(self, exc, value)
> > > > File "build/bdist.linux-i686/egg/MySQLdb/connections.py", line 35,
> > > > in defaulterrorhandler
> > > > raise errorclass, errorvalue
> > > > OperationalError: (1053, 'Server shutdown in progress')
>
> > > > And 1 second after:
>
> > > > Traceback (most recent call last):
> > > > File "gluon/main.py", line 435, in wsgibase
> > > > BaseAdapter.close_all_instances(BaseAdapter.rollback)
> > > > File "gluon/sql.py", line 754, in close_all_instances
> > > > action(instance)
> > > > File "gluon/sql.py", line 1350, in rollback
> > > > self._connection.rollback()
> > > > OperationalError: (2006, 'MySQL server has gone away')
>
> > > > On Jun 2, 6:47 pm, mdipierro <[email protected]> wrote:
>
> > > > > Try
>
> > > > >http://web2py.com/examples/static/1.77.3/web2py_src.zip
>
> > > > > some version are there and some not. Those obviously buggy have been
> > > > > deleted.
>
> > > > > Anyway, I'd like to understand the problem.
> > > > > do you use apache? mod_wsgi?
> > > > > do you use the built-in web server?
>
> ...
>
> read more »