1. if you use cache.ram you can't access the ram that your web2py process
is using from outside that process.
In that case you can code a controller that does the trick and call
it, e.g., with curl from the commandline.
2. same thing, curl from the commandline, or use urllib2, or something that
basically does a request to your webserver.
Il giorno venerdì 11 gennaio 2013 14:53:27 UTC+1, Daniel Gonzalez ha
scritto:
>
> Thanks, that makes sense. In that context, I have two questions:
>
> 1. How do I call "cache.ram.clear" from outside web2py. What web2py
> modules should I include?
> 2. How can I call a controller disguised as a user? I think this would
> be the most robust way, if it is possible ...
>
>
> On Friday, January 11, 2013 2:42:37 PM UTC+1, Niphlod wrote:
>>
>> Cache is always "related" to a key. In your function, that key is request
>> .env.path_info
>> Let's assume your key is "*the_key*"
>> If you need to "invalidate" the cache, you should use cache.ram.clear("*
>> the_key*") or cache.ram("*the_key*", None). From here one, there are 2
>> paths ahead of you:
>> - you have an empty cache and it will be filled at the 1st request coming
>> from an user after you called clear()
>> - you want to fill that key after clear() ASAP
>>
>> In the 1st case, after calling clear() you don't have to do nothing.
>>
>> In the 2nd case, either you call the controller "disguised as a user" or
>> you process the data and store it using cache.ram("*the_key*", thevalue)
>>
>> Il giorno venerdì 11 gennaio 2013 13:07:08 UTC+1, Daniel Gonzalez ha
>> scritto:
>>>
>>> Hi,
>>>
>>> I am serving some data which is expensive to compute with
>>> a @service.jsonrpc controller. I want to cache the result in RAM, using
>>> something like:
>>>
>>> @cache(request.env.path_info,time_expire=1000,cache_model=cache.ram)
>>>
>>> My data will not change very often, so I want to have a big ttl
>>> (actually, I would like a ttl "forever", is this possible?)
>>>
>>> But my main problem is this: in my architecture, web2py does not know
>>> when new data is available (the data is in a third-party database,
>>> completely out of control of web2py). Changes to the data happen
>>> asynchronously, according to business processes.
>>>
>>> I have three pieces:
>>>
>>> 1. web2py serving the data to the clients, via jsonrpc
>>> 2. a small script which knows (long-polling) when changes in the
>>> third-party database occur
>>> 3. a library to process the information in the third-party database.
>>> Calling this must be avoided at all costs, *except* when we have actual
>>> changes (which is why I want to add the cache)
>>>
>>> The easiest implementation for me would be to be able, from the external
>>> script, to invalidate the web2py cache whenever I detect changes relevant
>>> to the active sessions (not the whole cache, just the part related to my
>>> jsonrpc controller)
>>>
>>> Is this possible? Maybe by calling a web2py controller which is in
>>> charge of invalidating the cache?
>>>
>>> What about the session? I assume the web2py cache is session-related. My
>>> script should call the web2py controller using the correct session, but I
>>> do not know how to handle this.
>>>
>>> Thanks,
>>> Daniel
>>>
>>
--