Are there any specific things I need to do to enable logging under GAE? This is what I did:
- renamed the logging.example.conf file to logging.conf - added an entry for the test app I created above - removed all references to all handlers except consoleHandler Any page I request gives me an "IOError: invalid mode: a" in the GAE logging console. If I renamed the logging file back to logging.example.conf then I can request pages and run the app just fine. On Friday, November 23, 2012 7:47:26 PM UTC-6, howesc wrote: > > can you add some logging in and let us know if there are exceptions? > > about the delete limitations - web2py iterates over the set of items to > delete and deletes them (the version in trunk is improved over the last > release, but both still work). if the set of items to delete is large the > query to get the items to delete may take too long and timeout. in the > latest released version it actually can timeout before any rows are > deleted. in the trunk version it will delete at least some rows before the > first timeout (in most cases), so over a series of retries all the rows > will be deleted. This behavior is all to deal with how GAE implements > delete, so it is GAE specific. > > cfh > > > On Wednesday, November 21, 2012 5:04:32 PM UTC-8, Julian Sanchez wrote: >> >> Massimo, >> >> I created a small test to try your function: >> >> db.define_table('carrier', >> Field('name', type='string'), >> Field('description', type='string') >> ) >> >> db.carrier.name.requires = IS_NOT_IN_DB(db(db.carrier.id > 0), ' >> carrier.name') >> >> db.define_table('manufacturer', >> Field('name', type='string'), >> Field('country', type='string') >> ) >> >> >> db.manufacturer.name.requires = IS_NOT_IN_DB(db(db.manufacturer.id > 0), >> 'manufacturer.name') >> >> db.define_table('phone', >> Field('model', type='string'), >> Field('manufacturer', db.manufacturer), >> Field('carrier', db.carrier) >> ) >> >> db.phone.manufacturer.requires = IS_IN_DB(db, 'manufacturer.id', >> '%(name)s') >> db.phone.carrier.requires = IS_IN_DB(db, 'carrier.id', '%(name)s') >> >> >> >> >> def delete_linked(query, table=db.carrier): >> ids = [t.id in db(query).select(db.table.id)] >> for field in table._referenced_by: >> db(field._table._id.belongs(ids)).delete() >> >> >> db.carrier._before_delete.append(delete_linked) >> >> I can create an Apple iPhone on Verizon and an Apple iPhone on Sprint. >> If I run this under sqlite and I delete the carrier 'Sprint' I see one of >> the phones deleted as well (even without the '_before_delete' event which >> makes sense since that's the default behavior). >> However if I run this under GAE: >> >> - Without the '_before_delete' event the carrier 'Sprint' is deleted >> but not the phone. This is expected since cascading doesn't work. >> - With the '_before_delete' event (code just as above) *nothing* gets >> deleted, not even the carrier. I can see it disappear from the list but >> if >> I refresh the page it comes right back. I can also verify the record is >> still there by looking at the GAE admin page (Datastore viewer). Also, >> none of the phones are deleted either. >> >> Am I missing something? >> >> Also, when you say that if I delete too many records the operation may >> fail midway... is that a GAE limitation? Is the 1000 record limit I've >> read somewhere about? >> >> Thanks, >> Julian >> >> On Saturday, November 17, 2012 1:06:01 PM UTC-6, Massimo Di Pierro wrote: >>> >>> You can try something like >>> >>> def delete_linked(query, table=table): >>> ids = [t.id in db(query).select(db.table.id)] >>> for field in table._referenced_by: >>> db(field._table._id.belongs(ids)).delete() >>> >>> db.table._before_delete.append(delete_linked) >>> >>> but you will run into consistency problems. If there are too many >>> records this may fail midway. >>> >>> On Wednesday, 14 November 2012 19:07:02 UTC-6, Julian Sanchez wrote: >>>> >>>> Hi Everyone!! Long time lurker & first time posting... >>>> >>>> I am working on a simple application that I intend to deploy in GAE. I >>>> have a few tables with fields that reference other tables which by default >>>> enables the ondelete=CASCADE behavior. This works fine when I run the app >>>> locally using sqlite as the database. >>>> I believe GAE doesn't support cascading deletes natively. >>>> I presume web2py doesn't support cascading deletes when running under >>>> GAE because I don't see that happening. When I delete a row (rendered >>>> through SQLFORM.grid) only that row is deleted an all dependent tables >>>> remain untouched. >>>> >>>> The problem I have is that I can't find a way for me to implement the >>>> cascading behavior manually. I added a 'ondelete=mydelete' event for the >>>> SQLFORM.grid where I do the manual delete of the dependent tables and >>>> commit in the database, but that doesn't seem to work either. I searched >>>> through this forum but didn't find any suggestions either. Any >>>> suggestions >>>> as to what could I do to solve this?? Do I have to stay away from >>>> SQLFORM.grid to avoid this problem? >>>> >>>> Many Thanks!! >>>> Julian >>>> >>>> I am using web2py Version 2.2.1 (2012-10-21 16:57:04) stable on OS X >>>> Mountain Lion and GoogleAppEngineLauncher version 1.7.3 (1.7.3.333) >>>> >>> --