Cómo ejecutar Jetpack localmente en desarrollo

15 feb 2012, 01:13:52
Vistas: 18.3K
Votos: 17

¿Alguien sabe una forma sencilla de solucionar esto?

El código entre mi versión de desarrollo local de WordPress y la versión en producción están sincronizados (como debería ser). El problema es que esto hace que el plugin "Jetpack" funcione en la versión en vivo (ya que es un blog en producción que puede conectarse a WordPress.com) pero no en la versión de desarrollo local.

Esto significa que funcionalidades como el widget "Suscribirse" en la barra lateral están disponibles en la versión en vivo pero no en la local, por lo que no están sincronizadas.

0
Todas las respuestas a la pregunta 8
2
25

A partir de JetPack 2.2.1 ahora existe un modo de desarrollo/depuración local. http://jetpack.me/2013/03/28/jetpack-dev-mode-release/

Usa:

define ('JETPACK_DEV_DEBUG', true);

en tu archivo wp-config.php y deberías tener acceso a todos los módulos que no requieran una conexión para funcionar.

Actualización: desde la versión 3.3 aproximadamente, se añadió otro activador de desarrollo local mediante un filtro en lugar de un define.

Lo más reciente ahora está aquí: http://jetpack.me/support/development-mode/

El modo desarrollo se activa automáticamente si no tienes un punto en el nombre de host de tu sitio, por ejemplo localhost. Si usas una URL diferente, como mycooltestsite.local o similar, entonces necesitarás definir la constante JETPACK_DEV_DEBUG.

También puedes activar el modo desarrollo de Jetpack mediante un plugin, gracias al filtro jetpack_development_mode:

add_filter( 'jetpack_development_mode', '__return_true' );

A partir de Jetpack v3.9 también existe ahora un filtro de modo staging que fuerza a un sitio a ser reconocido como sitio de staging en lugar de producción: https://developer.jetpack.com/hooks/jetpack_is_staging_site/

add_filter( 'jetpack_is_staging_site', '__return_true' );
30 mar 2013 03:23:31
Comentarios

El modo Dev/Debug busca el encabezado Requires Connection en los archivos de módulos (jetpack/modules/*.php). De esta manera podemos verificar cuáles funcionarán en modo desarrollo y cuáles no.

brasofilo brasofilo
17 jul 2013 23:25:36

Una lista de las características que aún funcionan cuando el modo desarrollo está activado en localhost: https://wpperform.com/jetpack-development-mode/

Casey Plummer Casey Plummer
10 ene 2019 04:57:58
4

El método en el enlace proporcionado por @TracyRotton parece no funcionar desde Jetpack 2.0 y WordPress 3.4.2.

Incluso replicando todos los campos de la base de datos, no actúa como si estuviera conectado.
base de datos de jetpack


Como la pregunta original es sobre sincronizar entornos de desarrollo y producción, tal vez no sea posible.

No he probado en profundidad qué módulos funcionan y cuáles no, pero se puede engañar a Jetpack para que crea que está conectado haciendo la siguiente modificación en el archivo /plugins/jetpack/jetpack.php.

Dentro de la clase Jetpack_Data, modifica la primera función get_access_token así:

class Jetpack_Data {    
    function get_access_token( $user_id = false ) {
        return 'VALOR-DE-USER_TOKENS-ENCONTRADO-DENTRO-DE-LA-OPCIÓN-JETPACK_OPTIONS'; // <---truco
        if ( $user_id ) {
            if ( !$tokens = Jetpack::get_option( 'user_tokens' ) ) {
                return false;
            }

O simplemente coloca un return true; en lugar del user_tokens que podemos copiar de la opción jetpack_options.

PD: la primera versión de esta respuesta usaba otro truco. Aquí, es una modificación de una línea que lo cubre todo, en teoría...

14 nov 2012 21:59:04
Comentarios

También puede que necesites modificar módulos individuales, como el método force_user_connection() en publicize/publicize-jetpack.php. Sin embargo, incluso con eso, parece que no se comporta exactamente igual que si estuviera realmente conectado. No he revisado el código en profundidad, pero sospecho que hay muchos más lugares en el código que necesitan ser modificados para que realmente se ejecute exactamente igual que lo haría en un servidor en producción.

Ian Dunn Ian Dunn
1 ene 2013 23:42:17

@IanDunn, de acuerdo, mi respuesta va más sobre "no me molestes con que esté conectado y déjame probar algunos hooks" y no aborda realmente el problema del OP de tener versiones de desarrollo y producción sincronizadas.

brasofilo brasofilo
2 ene 2013 14:34:46

@IanDunn, encontré otra forma, quizás más efectiva. Actualicé la respuesta, ¿qué opinas?

brasofilo brasofilo
2 ene 2013 16:08:00

Intenté algo similar a eso ayer, pero aún no pude reproducir el problema que estaba viendo en mi servidor de staging, así que no estoy seguro si funciona completamente o no. El problema resultó ser un error en un plugin diferente y ya está solucionado, así que ya no necesito hackear Jetpack.

Ian Dunn Ian Dunn
2 ene 2013 19:08:28
1

Es posible engañar a JetPack copiando los valores de los campos de la base de datos desde una instalación activada a tu instalación local.

En una instalación remota con JetPack conectado, busca en la tabla wp_options los campos option_name que comiencen con jetpack_, como por ejemplo:

  • jetpack_activated
  • jetpack_options
  • jetpack_nonce_{cadena_aleatoria}
  • jetpack_active_modules

Copia estos campos y sus valores en la base de datos de tu instalación local.

Para más detalles sobre este proceso, consulta: http://www.ravendevelopers.com/node/57

11 oct 2012 23:15:59
Comentarios

Gracias por el enlace. Recibo el error de MySQL "#1062 - Entrada duplicada 'jetpack_activated' para la clave 'option_name'"

Alec Rust Alec Rust
12 oct 2012 03:30:51
0

Inspirado en la última solución de brasofilo, hay una forma aún más sencilla, solo abre jetpack.php, busca:

/**
* ¿Está Jetpack activo?
*/
public static function is_active() {
    return (bool) Jetpack_Data::get_access_token( JETPACK_MASTER_USER );
}

y reemplázalo con esto:

/**
* ¿Está Jetpack activo?
*/
public static function is_active() {
    return true;
}

Parece ser mucho más fácil que manipular la base de datos y funcionó para mí con la versión de Jetpack 2.1.1 y WordPress versión 3.5.

Pero deberías establecer una regla de ignorar para este archivo o algo similar si deseas mantener el plugin funcionando correctamente en el sitio en vivo, ya que es mejor estar conectado de la manera real que codificar manualmente la bandera de activo.

18 ene 2013 16:55:18
0

Si deseas toda la funcionalidad de Jetpack, tu entorno de desarrollo deberá ser consultable públicamente. Puedes configurar esto haciendo que tu dirección de desarrollo sea un subdominio, por ejemplo sandbox.misitio.com, estableciendo ese registro DNS para que apunte a la dirección IP donde se encuentra tu servidor de desarrollo y posiblemente configurando tu router/firewall para permitir solicitudes al puerto 80 hacia tu máquina.

Otra opción es ejecutar un entorno de staging y usarlo para todo lo relacionado con Jetpack. Los entornos de staging tienen muchas ventajas, por lo que sería una inversión valiosa configurarlo de todos modos.

15 feb 2012 01:26:19
0

El filtro jetpack_development_mode:

Solo quiero mencionar el filtro jetpack_development_mode.

Puedes usar simplemente:

add_filter( 'jetpack_development_mode', '__return_true' );

para ejecutar JetPack localmente.

Un pequeño plugin:

Para evitar tener que modificar el archivo wp-config.php con el truco habitual:

define ('JETPACK_DEV_DEBUG', true);

ahora puedes controlarlo con este pequeño plugin:

<?php
/**
 * Plugin Name: Ejecutar JetPack localmente
 * Plugin URI:  http://wordpress.stackexchange.com/a/144317/26350
 * Version:     0.0.1
 */
add_filter( 'jetpack_development_mode', '__return_true' );

Puedes verlo en GitHub.

13 may 2014 23:30:54
0
-1

La solución en http://ravendevelopers.com/node/57 PUEDE que no funcione con versiones de Jetpack superiores a la 2.x. Si no funciona en la versión 2.x, intenta instalar Jetpack primero en tu sitio en vivo (por ejemplo, ejemplo.com), conéctalo a wordpress.com y luego importa la configuración desde tu sitio en vivo a tu localhost/ejemplo que debe ser el mismo (la configuración importada desde ejemplo.com puede que no funcione con localhost/ejemplo2). El punto es que lo que hagas en tu sitio en vivo, asegúrate de que la configuración importada sea para el mismo sitio en tu localhost.

26 dic 2012 21:31:19
2
-2

Mmm, parece que tu respuesta puede simplificarse. Adopta este cambio y votaré positivamente tu respuesta.

Dado que is_active() devuelve true, solo necesitas cambiar una línea en admin_page():

1. cambia el valor $is_user_connected a true

function admin_page() {
    global $current_user;

    $role = $this->translate_current_user_to_role();
    $is_connected = Jetpack::is_active();
    $user_token = Jetpack_Data::get_access_token($current_user->ID);
    $is_user_connected = true;//$user_token && !is_wp_error($user_token);
    // ...la función continúa
27 nov 2012 00:14:22
Comentarios

Hola Matt, entiendo que este es un comentario a mi respuesta. Hay 2 funciones is_active en JetPack, por eso la solución parece redundante, pero no lo es :)

brasofilo brasofilo
27 nov 2012 04:15:05

Mmm, voy a revisar. Pensé que solo encontré un método is_active que estaba en la clase Jetpack, pero lo revisaré de nuevo.

Matt Senate Matt Senate
30 nov 2012 23:15:17