Jetpack in esecuzione in locale

15 feb 2012, 01:13:52
Visualizzazioni: 18.3K
Voti: 17

Mi chiedevo se qualcuno conoscesse una soluzione semplice per questo problema.

Il codice della mia versione di sviluppo locale di un'istanza WordPress e quella live sono sincronizzati (come dovrebbero essere). Il problema è che questo significa che il plugin "Jetpack" funziona sulla versione live (essendo un blog live che può connettersi a WordPress.com) ma non sulla versione di sviluppo locale.

Ciò significa che alcune funzionalità sono disponibili nella versione live (come il widget sidebar "Iscriviti") ma non in quella di sviluppo locale, creando così una mancata sincronizzazione.

0
Tutte le risposte alla domanda 8
2
25

A partire da JetPack 2.2.1 è ora disponibile una modalità di sviluppo/debug locale. http://jetpack.me/2013/03/28/jetpack-dev-mode-release/

Utilizza:

define ('JETPACK_DEV_DEBUG', true);

nel tuo wp-config.php e dovresti avere accesso a tutti i moduli che non richiedono una connessione per funzionare.

Aggiornamento, a partire dalla versione 3.3 è stato aggiunto un altro trigger per lo sviluppo locale tramite filtro invece che con define.

Le informazioni più recenti sono ora disponibili qui: http://jetpack.me/support/development-mode/

La modalità sviluppo viene abilitata automaticamente se il nome host del tuo sito non contiene un punto, ad esempio localhost. Se utilizzi un URL diverso, come mycooltestsite.local o simili, dovrai definire la costante JETPACK_DEV_DEBUG.

Puoi anche abilitare la modalità sviluppo di Jetpack tramite un plugin, grazie al filtro jetpack_development_mode:

add_filter( 'jetpack_development_mode', '__return_true' );

A partire da Jetpack v3.9 è ora disponibile anche un filtro per la modalità staging che forza un sito ad essere riconosciuto come sito di staging anziché di produzione: https://developer.jetpack.com/hooks/jetpack_is_staging_site/

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

La modalità Dev/Debug cerca l'intestazione Requires Connection nei file dei moduli (jetpack/modules/*.php). In questo modo possiamo verificare quali funzioneranno in modalità dev e quali no.

brasofilo brasofilo
17 lug 2013 23:25:36

Un elenco delle funzionalità che continuano a funzionare quando la modalità sviluppo è abilitata su localhost: https://wpperform.com/jetpack-development-mode/

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

Il metodo nel link fornito da @TracyRotton sembra non funzionare a partire da Jetpack 2.0 e WordPress 3.4.2.

Anche replicando tutti i campi del database, non viene riconosciuto come connesso.
database jetpack


Poiché la domanda originale riguarda la sincronizzazione tra ambienti di sviluppo e produzione, forse non è possibile farlo.

Non ho testato in profondità quali moduli funzionino e quali no, ma Jetpack può essere ingannato facendogli credere che sia connesso apportando la seguente modifica nel file /plugins/jetpack/jetpack.php.

All'interno della classe Jetpack_Data, modificare la prima funzione get_access_token in questo modo:

class Jetpack_Data {    
    function get_access_token( $user_id = false ) {
        return 'VALORE-USER_TOKENS-TROVATO-NELL-OPZIONE-JETPACK_OPTIONS'; // <---trucco
        if ( $user_id ) {
            if ( !$tokens = Jetpack::get_option( 'user_tokens' ) ) {
                return false;
            }

Oppure semplicemente inserire un return true; al posto del user_tokens che possiamo copiare dall'opzione jetpack_options.

PS: la prima versione di questa risposta utilizzava un altro trucco. Qui, si tratta di una modifica di una riga che dovrebbe coprire tutto, in teoria...

14 nov 2012 21:59:04
Commenti

Potresti anche dover modificare singoli moduli, come il metodo force_user_connection() in publicize/publicize-jetpack.php. Anche con quello, però, non sembra comportarsi esattamente come se fosse realmente connesso. Non ho analizzato il codice in profondità, ma sospetto che ci siano molti altri punti nel codice che necessitano di essere modificati per farlo eseguire esattamente come farebbe su un server live.

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

@IanDunn, concordo, la mia risposta è più orientata a "non assillarmi sulla connessione e permettimi di testare alcuni hook" e non affronta realmente il problema sollevato dall'OP di avere versioni dev e deploy sincronizzate.

brasofilo brasofilo
2 gen 2013 14:34:46

@IanDunn, ho trovato un altro modo, forse più efficace. Ho aggiornato la risposta, cosa ne pensi?

brasofilo brasofilo
2 gen 2013 16:08:00

Ho provato qualcosa di simile ieri, ma non sono ancora riuscito a riprodurre il problema che stavo vedendo sul mio server di staging, quindi non sono sicuro se funzioni completamente o meno. Il problema si è rivelato essere un bug in un plugin diverso ed è stato risolto ora, quindi non ho più bisogno di modificare Jetpack.

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

È possibile ingannare JetPack copiando i valori dei campi del database da un'installazione attivata alla propria installazione locale.

Su un'installazione (remota) con JetPack connesso, cerca nella tabella wp_options i campi option_name che iniziano con jetpack_, come ad esempio:

  • jetpack_activated
  • jetpack_options
  • jetpack_nonce_{random_string}
  • jetpack_active_modules

Copia questi campi e i relativi valori nel database della tua installazione locale.

Per maggiori dettagli su questo processo consulta: http://www.ravendevelopers.com/node/57

11 ott 2012 23:15:59
Commenti

Grazie per il link. Ricevo l'errore MySQL "#1062 - Voce duplicata 'jetpack_activated' per la chiave 'option_name'"

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

Ispirato dall'ultima soluzione di brasofilo, c'è un modo ancora più semplice, basta aprire jetpack.php, cercare

/**
* Jetpack è attivo?
*/
public static function is_active() {
    return (bool) Jetpack_Data::get_access_token( JETPACK_MASTER_USER );
}

e sostituire con questo:

/**
* Jetpack è attivo?
*/
public static function is_active() {
    return true;
}

Sembra molto più semplice che giocare con il database e ha funzionato per me con la versione di Jetpack 2.1.1 e WordPress versione 3.5

Ma dovresti impostare una regola di esclusione per questo file o qualcosa di simile se vuoi mantenere il plugin funzionante correttamente sul sito live, perché è meglio essere connessi nel modo reale piuttosto che hardcodare il flag di attivazione.

18 gen 2013 16:55:18
0

Se desideri la funzionalità completa di Jetpack, il tuo ambiente di sviluppo dovrà essere interrogabile pubblicamente. Puoi configurarlo rendendo il tuo indirizzo di sviluppo un sottodominio, ad esempio sandbox.miosito.com, impostando il record DNS per puntare all'indirizzo IP in cui si trova il tuo server di sviluppo e possibilmente configurando il tuo router/firewall per consentire le richieste sulla porta 80 alla tua macchina.

Un'altra opzione è quella di utilizzare un ambiente di staging e usarlo per tutto ciò che riguarda Jetpack. Gli ambienti di staging offrono molti vantaggi, quindi sarebbe un investimento utile configurarlo comunque.

15 feb 2012 01:26:19
0

Il filtro jetpack_development_mode:

Vorrei menzionare il filtro jetpack_development_mode.

Puoi semplicemente utilizzare:

add_filter( 'jetpack_development_mode', '__return_true' );

per eseguire JetPack in locale.

Un piccolo plugin:

Per evitare di dover modificare il file wp-config.php con il solito trucco:

define ('JETPACK_DEV_DEBUG', true);

ora puoi controllarlo tramite questo piccolo plugin:

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

Puoi verificarlo su GitHub.

13 mag 2014 23:30:54
0
-1

La correzione su http://ravendevelopers.com/node/57 POTREBBE non funzionare con le versioni di Jetpack superiori alla 2.x. Se non funziona sulla versione 2.x prova prima a installare Jetpack sul tuo sito live (ad esempio example.com), connettilo a wordpress.com e poi importa le impostazioni dal tuo sito live al tuo localhost/example che deve essere lo stesso (le impostazioni importate da example.com potrebbero non funzionare con localhost/example2). Il punto è che quello che fai sul tuo sito live, assicurati che le impostazioni importate siano per lo stesso sito sul tuo localhost.

26 dic 2012 21:31:19
2
-2

Hmm, sembra che la tua risposta possa essere semplificata. Adotta questa modifica e voterò positivamente la tua risposta.

Dato che is_active() restituisce true, devi solo modificare una riga in admin_page():

1. cambia il valore $is_user_connected in 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 funzione continua
27 nov 2012 00:14:22
Commenti

Ciao Matt, capisco che questo è un commento alla mia risposta. Ci sono 2 funzioni is_active in JetPack, ecco perché la soluzione sembra ridondante, ma non lo è :)

brasofilo brasofilo
27 nov 2012 04:15:05

Mmh, darò un'occhiata. Pensavo di aver trovato solo un metodo is_active nella classe Jetpack, ma controllerò di nuovo.

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