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)
>>>>
>>>
--