web-dev-qa-db-fra.com

Comment faire un cliché MySQL depuis un site de production sans utiliser de script de recherche et de remplacement pour le développement local?

J'ai effectué un vidage MySQL de ma base de données de production WordPress à importer dans mon environnement de développement local. Je prévois d'effectuer fréquemment ce dump et import de base de données. Puis-je éviter d'exécuter un script de recherche et remplacement ou une requête MySQL mettant à jour tous les permaliens, URL de sites, etc.?

Pourrais-je inclure quelque chose comme ce qui suit dans mon wp-config.php pour remplacer les liens susmentionnés:

define('WP_HOME',    'http://localhost.com:8888/example');
define('WP_SITEURL', 'http://localhost:8888/example');

Mon objectif est de rendre aussi FACILE que possible l’exécution de sauvegardes de base de données de routine de mon site de production au niveau local.

2
Matt

Ce que vous avez posté fonctionnera correctement pour tous les liens générés par WordPress: permaliens, mises en file d'attente de scripts/styles pour les fichiers locaux, images en vedette, etc.

J'ai tendance à définir l'URL de mon site et l'URL de la maison de manière dynamique, comme ceci:

<?php
define('WP_HOME', 'http://' . $_SERVER['HTTP_Host']);
define('WP_SITEURL', WP_HOME . '/wp');

Remarque: HTTP_Host n'est pas toujours présent, utilisez-le avec prudence

En ce qui concerne le contenu, les liens et les URL - des éléments tels que des liens vers d'autres publications ou des images, ceux-ci ne seront pas modifiés car ils ne figurent que dans la base de données et ne sont pas générés de manière dynamique. Cependant, vous pouvez probablement faire de la magie preg_replace avec le filtre the_content.

<?php
// probably too simplistic and will break things.
add_filter('the_content', 'wpse75106_change_Host');
function wpse75106_change_Host($c)
{
    return preg_replace(
        '#(https?://)production_site.com#u',
        '{$1}local_site.com',
        $c
    );
}

Cela dit, les choses importantes sont les choses que WP génère, je ne m'inquiéterais pas trop des liens/images de contenu sur votre ordinateur local.

3
chrisguitarguy

La recherche et le remplacement naïfs ne sont tout simplement pas suffisants, car une partie des données de la base de données (les widgets, par exemple) est sérialisée et vous devez d'abord la désérialiser pour remplacer le texte d'une donnée sérialisée.

La meilleure chose à faire est de dupliquer intégralement l'environnement de production sur votre serveur de développement, ce qui inclut au minimum la modification de votre fichier hosts pour qu'il pointe vers le domaine de production vers l'adresse IP de votre serveur de test. Une fois que vous avez configuré cela, la synchronisation de vos fichiers source et de votre base de données devrait vous donner un bon environnement de développement.

0
Mark Kaplun