¿Cuándo/cómo se almacenan los clicks?

48 views
Skip to first unread message

RamSys

unread,
Jan 5, 2016, 5:31:32 PM1/5/16
to Meneame desarrollo
He conseguido que funcione el código en http://meneame.jordisan.net , pero veo que no se están guardando los clicks en las noticias (lo que provoca un division by zero en un cron)

En libs/link.php veo este código:

        function add_click($no_go=false) {
               
global $globals, $db;


               
if (! $globals['bot']
                       
&& ! Link::visited($this->id)
                       
&& $globals['click_counter']
                       
&& ($no_go || (isset($_COOKIE['k']) && check_security_key($_COOKIE['k'])))
                       
&& $this->ip != $globals['user_ip']) {
                       
// Delay storing
                       
self::$clicked = $this->id;
               
}
       
}


       
static function store_clicks() {
               
global $globals, $db;


               
if (!self::$clicked) return false;
                $id
= self::$clicked;


pero no veo cómo/cuándo se llama store_clicks; ¿alguien tiene alguna idea?

Ricardo Galli

unread,
Jan 6, 2016, 4:03:39 AM1/6/16
to men...@googlegroups.com
Eso se hace desde la función shutdown en lib/init.php 

(para responder más rápido y almacenar varios clicks en una única transacción)

--
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a men...@googlegroups.com
Para anular la suscripción a este grupo, envíe un mensaje a meneame-u...@googlegroups.com
Para obtener más opciones, visita este grupo en http://groups.google.com/group/meneame?hl=es.
Preguntas inteligentes y buenos modales:
http://es.wikipedia.org/wiki/Netiquette
http://sindominio.net/ayuda/preguntas-inteligentes.html
Wiki de meneame:
http://meneame.wikispaces.com/
Blog de meneame:
http://blog.meneame.net/
---
Has recibido este mensaje porque estás suscrito al grupo "Meneame desarrollo" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a meneame+u...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
  ricardo galli
  http://gallir.wordpress.com/

RamSys

unread,
Jan 6, 2016, 4:51:40 AM1/6/16
to Meneame desarrollo
  Ricardo,
  ¿podría ser que no funcionara correctamente porque estoy usando php-fpm y/o no estoy usando memcache?

  En mi caso, cuando shutdown() llama a store_clicks()self::$clicked() siempre es falso, y me temo que es por el modo en que se está ejecutando PHP.

  Además, este código en store_clicks:

        static function store_clicks() {
[...]
               
if (! memcache_menabled()) {
                        $db
->query("UPDATE link_clicks SET counter=counter+1 WHERE id = $id");



  ¿No debería ser algo como?

                        $db->query("INSERT INTO link_clicks (id, counter) VALUES ($id, 1) ON DUPLICATE KEY UPDATE counter=counter+1");


  De otro modo parece que los clicks nunca se crearían en la tabla si NO estás usando memcache. Si quieres lo comento como issue en GitHub

-- 
Jordi S.

Ricardo Galli

unread,
Jan 6, 2016, 5:27:03 AM1/6/16
to men...@googlegroups.com
Sí, puede ser, nunca lo probé sin memcache. 

De todas formas no cuesta nada tenerlo en marcha y diría que es indispensable (si no, por ejemplo, la generación de las cajas irían muy lentas cuando hay muchas noticias y comentarios).

RamSys

unread,
Jan 6, 2016, 6:10:12 AM1/6/16
to Meneame desarrollo
  Vale.. entonces me apunto memcache como un requisito :)

  Gracias.
-- 
Jordi S.

Fermin Molina

unread,
Jan 6, 2016, 7:48:57 PM1/6/16
to Meneame desarrollo
Yo lo probé sin memcache y no funcionaba. No busqué más, simplemente configuré memcached y empezó a funcionar.
Por cierto, tuve que parchear un poco el código de www/libs/utils.php con esto (solo se modifican 3 líneas):

www/libs/utils.php

@@ -837,11 +832,12 @@
 function memcache_minit () {
        global $memcache, $globals;
 
        if ($memcache) return true;
        if ($globals['memcache_host']) {
-               $memcache = new Memcache;
+               $memcache = new Memcached;
                if (!isset($globals['memcache_port'])) $globals['memcache_port'] = 11211;
-               if ( ! @$memcache->connect($globals['memcache_host'], $globals['memcache_port']) ) {
+               if ( ! $memcache->addServer($globals['memcache_host'], $globals['memcache_port']) ) {
                        syslog(LOG_INFO, "Meneame: memcache init failed " . $globals['memcache_host']);
                        $memcache = false;
                        return false;
@@ -863,11 +856,11 @@
        global $memcache, $globals;
 
        // Check for memcache
-       if (memcache_minit()) return $memcache->set($key, $value, 0, $expire);
+       if (memcache_minit()) return $memcache->set($key, $value, $expire);
        return false;
 }

¿A tí te funcionó "tal cual"? No entiendo por qué me funciona usando la clase "memcached" y no con la "memcache" (tampoco soy ningún experto en php...)

Saludos!
Reply all
Reply to author
Forward
0 new messages