[web2py] Re: @cache.action not working properly with nginx, is any additional configuration required?

2015-05-20 Thread Lisandro
Thank you very much for the clarification.

Do you know about some example of nginx+uwsgi configuration with memcache? 
I've already read this documentation:
http://web2py.com/books/default/chapter/29/13/deployment-recipes#Memcache
http://nginx.org/en/docs/http/ngx_http_memcached_module.html

I've already created the model file models/0_memcache.py with this code:

from gluon.contrib.memcache import MemcacheClient
memcache_servers = ['127.0.0.1:11211']
cache.memcache = MemcacheClient(request, memcache_servers)
cache.ram = cache.disk = cache.memcache

But I'm not shure about my nginx virtual host configuration. I'm concerned 
about which should be the proper way of combining all the stuff in the 
nginx's virtual server configuration (by all the stuff I mean, gzip, 
location rules for static content, uwsgi pass, etc).

This is the actual nginx's virtual server configuration that I've tried, 
but it doesn't work (the website works ok, but still no caching).

server {
listen   80;
server_name  dev.demo;
root /home/gonguinguen/medios;

location ~* ^/(\w+)/static(?:/_[\d]+\.[\d]+\.[\d]+)?/(.*)$ {
alias /home/gonguinguen/medios/applications/$1/static/$2;
expires max;
}

location ~* ^/(\w+)/static/ {
root /home/gonguinguen/medios/applications;
expires max;
}

location / {
set$memcached_key $uri?$args;
memcached_pass 127.0.0.1:11211;
error_page 404 502 504 = @fallback;

uwsgi_pass  unix:///tmp/medios.socket;
include uwsgi_params;
uwsgi_param UWSGI_SCHEME $scheme;
uwsgi_param SERVER_SOFTWAREnginx/$nginx_version;
}

location @fallback {
uwsgi_pass  unix:///tmp/medios.socket;
}
}




I don't know where to or how to check if memcache is caching.

Thanks in advance!



El miércoles, 20 de mayo de 2015, 9:11:58 (UTC-3), Paolo Valleri escribió:

 this is the correct behavior in a multi-process/multi-thread environment 
 because cache.ram is not shared across them.
 use either memcache or redis to have a global cache

 Paolo

 On Wednesday, May 20, 2015 at 1:46:48 PM UTC+2, Lisandro wrote:

 Are there any special consideration about @cache.action in production 
 with nginx + uwsgi? I'm having problems using it, so I made a simple test 
 to show you.

 In the default welcome application, in default.py controller:

 @cache.action(time_expire=30, cache_model=cache.ram, session=False, vars=
 False, public=True)
 def test():
 return request.now.strftime('%H:%M:%S')

 Now, the first time you hit the /test url, you will see the current time. 
 But if you inmediately hit the url again, you will see the time shown in 
 the first hit. This time will be shown for 30 seconds, that is, the result 
 of the function is cached for 30 seconds.

 This works ok with web2py's embedded server. 
 However, when I move it to nginx + uwsgi, @cache.action behaves strangely:
 1) When I first hit the url, I see the current time.
 2) Three seconds after, I hit the url again, and I don't see cached time, 
 instead, I see again the current time.
 3) Three or four seconds after, I hit the url again, and I see the first 
 cached time.
 4) I keep hitting the url, and it keeps returning previously cached 
 values, randomly. But something is shure: it never returns a value for 30 
 seconds, the code is executed at least every 4 o 5 seconds. So in a period 
 of 30 seconds, no matter how many times I hit the url, the returned values 
 will always differ 4 o 5 seconds between them.

 Am I missing something? Is it necesarry to configure some nginx's stuff? 
 I don't think it would be necessary. 



-- 
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 web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [web2py] Re: @cache.action not working properly with nginx, is any additional configuration required?

2015-05-20 Thread Paolo Valleri
The web2py part you have posted is more than enough. Did you try it?
memcache with nginx is an other thing


 Paolo

2015-05-20 15:03 GMT+02:00 Lisandro rostagnolisan...@gmail.com:

 Thank you very much for the clarification.

 Do you know about some example of nginx+uwsgi configuration with memcache?
 I've already read this documentation:
 http://web2py.com/books/default/chapter/29/13/deployment-recipes#Memcache
 http://nginx.org/en/docs/http/ngx_http_memcached_module.html

 I've already created the model file models/0_memcache.py with this code:

 from gluon.contrib.memcache import MemcacheClient
 memcache_servers = ['127.0.0.1:11211']
 cache.memcache = MemcacheClient(request, memcache_servers)
 cache.ram = cache.disk = cache.memcache

 But I'm not shure about my nginx virtual host configuration. I'm concerned
 about which should be the proper way of combining all the stuff in the
 nginx's virtual server configuration (by all the stuff I mean, gzip,
 location rules for static content, uwsgi pass, etc).

 This is the actual nginx's virtual server configuration that I've tried,
 but it doesn't work (the website works ok, but still no caching).

 server {
 listen   80;
 server_name  dev.demo;
 root /home/gonguinguen/medios;

 location ~* ^/(\w+)/static(?:/_[\d]+\.[\d]+\.[\d]+)?/(.*)$ {
 alias /home/gonguinguen/medios/applications/$1/static/$2;
 expires max;
 }

 location ~* ^/(\w+)/static/ {
 root /home/gonguinguen/medios/applications;
 expires max;
 }

 location / {
 set$memcached_key $uri?$args;
 memcached_pass 127.0.0.1:11211;
 error_page 404 502 504 = @fallback;

 uwsgi_pass  unix:///tmp/medios.socket;
 include uwsgi_params;
 uwsgi_param UWSGI_SCHEME $scheme;
 uwsgi_param SERVER_SOFTWAREnginx/$nginx_version;
 }

 location @fallback {
 uwsgi_pass  unix:///tmp/medios.socket;
 }
 }




 I don't know where to or how to check if memcache is caching.

 Thanks in advance!



 El miércoles, 20 de mayo de 2015, 9:11:58 (UTC-3), Paolo Valleri escribió:

 this is the correct behavior in a multi-process/multi-thread environment
 because cache.ram is not shared across them.
 use either memcache or redis to have a global cache

 Paolo

 On Wednesday, May 20, 2015 at 1:46:48 PM UTC+2, Lisandro wrote:

 Are there any special consideration about @cache.action in production
 with nginx + uwsgi? I'm having problems using it, so I made a simple test
 to show you.

 In the default welcome application, in default.py controller:

 @cache.action(time_expire=30, cache_model=cache.ram, session=False, vars
 =False, public=True)
 def test():
 return request.now.strftime('%H:%M:%S')

 Now, the first time you hit the /test url, you will see the current
 time.
 But if you inmediately hit the url again, you will see the time shown in
 the first hit. This time will be shown for 30 seconds, that is, the result
 of the function is cached for 30 seconds.

 This works ok with web2py's embedded server.
 However, when I move it to nginx + uwsgi, @cache.action behaves
 strangely:
 1) When I first hit the url, I see the current time.
 2) Three seconds after, I hit the url again, and I don't see cached
 time, instead, I see again the current time.
 3) Three or four seconds after, I hit the url again, and I see the first
 cached time.
 4) I keep hitting the url, and it keeps returning previously cached
 values, randomly. But something is shure: it never returns a value for 30
 seconds, the code is executed at least every 4 o 5 seconds. So in a period
 of 30 seconds, no matter how many times I hit the url, the returned values
 will always differ 4 o 5 seconds between them.

 Am I missing something? Is it necesarry to configure some nginx's stuff?
 I don't think it would be necessary.

  --
 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 a topic in the
 Google Groups web2py-users group.
 To unsubscribe from this topic, visit
 https://groups.google.com/d/topic/web2py/P_ezuB93DAY/unsubscribe.
 To unsubscribe from this group and all its topics, send an email to
 web2py+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/d/optout.


-- 
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 web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[web2py] Re: @cache.action not working properly with nginx, is any additional configuration required?

2015-05-20 Thread Paolo Valleri
this is the correct behavior in a multi-process/multi-thread environment 
because cache.ram is not shared across them.
use either memcache or redis to have a global cache

Paolo

On Wednesday, May 20, 2015 at 1:46:48 PM UTC+2, Lisandro wrote:

 Are there any special consideration about @cache.action in production with 
 nginx + uwsgi? I'm having problems using it, so I made a simple test to 
 show you.

 In the default welcome application, in default.py controller:

 @cache.action(time_expire=30, cache_model=cache.ram, session=False, vars=
 False, public=True)
 def test():
 return request.now.strftime('%H:%M:%S')

 Now, the first time you hit the /test url, you will see the current time. 
 But if you inmediately hit the url again, you will see the time shown in 
 the first hit. This time will be shown for 30 seconds, that is, the result 
 of the function is cached for 30 seconds.

 This works ok with web2py's embedded server. 
 However, when I move it to nginx + uwsgi, @cache.action behaves strangely:
 1) When I first hit the url, I see the current time.
 2) Three seconds after, I hit the url again, and I don't see cached time, 
 instead, I see again the current time.
 3) Three or four seconds after, I hit the url again, and I see the first 
 cached time.
 4) I keep hitting the url, and it keeps returning previously cached 
 values, randomly. But something is shure: it never returns a value for 30 
 seconds, the code is executed at least every 4 o 5 seconds. So in a period 
 of 30 seconds, no matter how many times I hit the url, the returned values 
 will always differ 4 o 5 seconds between them.

 Am I missing something? Is it necesarry to configure some nginx's stuff? I 
 don't think it would be necessary. 


-- 
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 web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [web2py] Re: @cache.action not working properly with nginx, is any additional configuration required?

2015-05-20 Thread Lisandro
Do you mean that it should work adding only that lines in 
models/0_memcache.py? I've tried that but the results are still the same :/

I was asking about the nginx/uwsgi part because I thought some 
configuration was required.
In case it doesn't require any additional configuration to nginx/uwsgi, 
then I don't understand why cache isn't working yet. I'm using web2py 
2.10.4 with nginx + uwsgi. 

Also, I don't have any additional local stuff, it's just the welcome app 
with that simple test function in default controller, and those lines in 
models/0_memcache.py. All that, running with nginx and uwsgi.

El miércoles, 20 de mayo de 2015, 10:35:35 (UTC-3), Paolo Valleri escribió:

 The web2py part you have posted is more than enough. Did you try it?
 memcache with nginx is an other thing 


  Paolo

 2015-05-20 15:03 GMT+02:00 Lisandro rostagno...@gmail.com javascript::

 Thank you very much for the clarification.

 Do you know about some example of nginx+uwsgi configuration with 
 memcache? I've already read this documentation:
 http://web2py.com/books/default/chapter/29/13/deployment-recipes#Memcache
 http://nginx.org/en/docs/http/ngx_http_memcached_module.html

 I've already created the model file models/0_memcache.py with this code:

 from gluon.contrib.memcache import MemcacheClient
 memcache_servers = ['127.0.0.1:11211']
 cache.memcache = MemcacheClient(request, memcache_servers)
 cache.ram = cache.disk = cache.memcache

 But I'm not shure about my nginx virtual host configuration. I'm 
 concerned about which should be the proper way of combining all the stuff 
 in the nginx's virtual server configuration (by all the stuff I mean, 
 gzip, location rules for static content, uwsgi pass, etc).

 This is the actual nginx's virtual server configuration that I've tried, 
 but it doesn't work (the website works ok, but still no caching).

 server {
 listen   80;
 server_name  dev.demo;
 root /home/gonguinguen/medios;
 
 location ~* ^/(\w+)/static(?:/_[\d]+\.[\d]+\.[\d]+)?/(.*)$ {
 alias /home/gonguinguen/medios/applications/$1/static/$2;
 expires max;
 }
 
 location ~* ^/(\w+)/static/ {
 root /home/gonguinguen/medios/applications;
 expires max;
 }
 
 location / {
 set$memcached_key $uri?$args;
 memcached_pass 127.0.0.1:11211;
 error_page 404 502 504 = @fallback;
 
 uwsgi_pass  unix:///tmp/medios.socket;
 include uwsgi_params;
 uwsgi_param UWSGI_SCHEME $scheme;
 uwsgi_param SERVER_SOFTWAREnginx/$nginx_version;
 }

 location @fallback {
 uwsgi_pass  unix:///tmp/medios.socket;
 }
 }




 I don't know where to or how to check if memcache is caching.

 Thanks in advance!



 El miércoles, 20 de mayo de 2015, 9:11:58 (UTC-3), Paolo Valleri escribió:

 this is the correct behavior in a multi-process/multi-thread environment 
 because cache.ram is not shared across them.
 use either memcache or redis to have a global cache

 Paolo

 On Wednesday, May 20, 2015 at 1:46:48 PM UTC+2, Lisandro wrote:

 Are there any special consideration about @cache.action in production 
 with nginx + uwsgi? I'm having problems using it, so I made a simple test 
 to show you.

 In the default welcome application, in default.py controller:

 @cache.action(time_expire=30, cache_model=cache.ram, session=False, 
 vars=False, public=True)
 def test():
 return request.now.strftime('%H:%M:%S')

 Now, the first time you hit the /test url, you will see the current 
 time. 
 But if you inmediately hit the url again, you will see the time shown 
 in the first hit. This time will be shown for 30 seconds, that is, the 
 result of the function is cached for 30 seconds.

 This works ok with web2py's embedded server. 
 However, when I move it to nginx + uwsgi, @cache.action behaves 
 strangely:
 1) When I first hit the url, I see the current time.
 2) Three seconds after, I hit the url again, and I don't see cached 
 time, instead, I see again the current time.
 3) Three or four seconds after, I hit the url again, and I see the 
 first cached time.
 4) I keep hitting the url, and it keeps returning previously cached 
 values, randomly. But something is shure: it never returns a value for 30 
 seconds, the code is executed at least every 4 o 5 seconds. So in a period 
 of 30 seconds, no matter how many times I hit the url, the returned values 
 will always differ 4 o 5 seconds between them.

 Am I missing something? Is it necesarry to configure some nginx's 
 stuff? I don't think it would be necessary. 

  -- 
 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 a topic in the 
 Google Groups web2py-users group.
 To unsubscribe from this topic, visit 

Re: [web2py] Re: @cache.action not working properly with nginx, is any additional configuration required?

2015-05-20 Thread Lisandro
Thanks Niphlod, and Paolo too. With your last comments I understand a 
little better. Sorry about the web2py / nginx confusion. I know I'm going 
way beyond my limits, but for now there's no budget for more :(

I understand a bit more about the problem of caching in memory when there 
are multiple processes. Niphlod, based on your last sentence, I did a quick 
test (a test that I've sould done previously) and changed cache.ram to 
cache.disk, and it started working, as it would be expected.

So, instead of memcache, I read a little about redis, and I decided to give 
it a try.
The installation was easy:
sudo apt-get install redis-server
sudo apt-get install python-redis

Then, somewhere in model file:
from gluon.contrib.redis_cache import RedisCache
cache.redis = RedisCache('localhost:6379',db=None, debug=True, 
with_lock=True)
cache.ram = cache.disk = cache.redis

This was the first quick test and it worked ok. 
I've used with_lock=True because of the comment of the book:
http://web2py.com/books/default/chapter/29/13/deployment-recipes#Caching-with-Redis

I'll try on production and see what happens with performance and resource 
usage. 
Thank you both for the help!





https://groups.google.com/forum/#!searchin/web2py/share$20processes/web2py/6B3d_M0z9yQ/mJvr5qMNDhkJ


 

El miércoles, 20 de mayo de 2015, 12:03:30 (UTC-3), Niphlod escribió:

 halt!. Either you use web2py (and we can help with that) OR nginx (and 
 you'll need to cfr THEIR support for a proper config). 
 There's no facility whatsoever for web2py to cache the object and for 
 nginx to fetch it from the same memcached instance.

 That being said, using cache.ram in multiprocess environment is OF COURSE 
 pitfalled because each process would be need to be hit the first time, so 
 what you're observing with cache.ram is entirely expected. 

 Once you choose to store the cached object in some external backend (disk, 
 redis, memcache), the pitfall is closed, but you don't need any 
 additional nginx configuration.


-- 
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 web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [web2py] Re: @cache.action not working properly with nginx, is any additional configuration required?

2015-05-20 Thread Niphlod
halt!. Either you use web2py (and we can help with that) OR nginx (and 
you'll need to cfr THEIR support for a proper config). 
There's no facility whatsoever for web2py to cache the object and for nginx 
to fetch it from the same memcached instance.

That being said, using cache.ram in multiprocess environment is OF COURSE 
pitfalled because each process would be need to be hit the first time, so 
what you're observing with cache.ram is entirely expected. 

Once you choose to store the cached object in some external backend (disk, 
redis, memcache), the pitfall is closed, but you don't need any 
additional nginx configuration.

-- 
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 web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.