Există două părți ale migrației: baza de date și fișierele statice.
Cea mai importantă parte este baza de date. Veți avea nevoie de o copie de rezervă a bazei de date (alias sqldump
) din baza de date de producție și va trebui să-l importați în baza de date locală.Există mai multe modalități de a realiza acest lucru, în funcție de găzduirea site-ului dvs. și dacă puteți utiliza sau nu drush
.
Site-ul local ar trebui să fie oarecum funcțional după importul unei baze de date, dar poate părea ciudat dacă îi lipsesc elemente statice, cum ar fi fișierele imagine. În funcție de modul în care este configurat site-ul de producție, probabil că puteți găsi majoritatea acestora în directorul de fișiere publice. Cea mai comună locație pentru aceste fișiere este ./web/sites/default/files
dar calea poate diferi. Va trebui să copiați aceste fișiere de pe gazda web de producție în mediul dvs. local folosind un instrument precum rsync
, scp
, sau sftp
.
Dacă ați instalat Drush (prin compozitorul necesită drush/drush
) atunci este posibil să puteți utiliza drush sql:sync
pentru a sincroniza bazele de date.
Înainte de a face asta, poate doriți să configurați Aliasuri Drush pentru medii locale și îndepărtate.
Ține minte, de asemenea, că drush migra
este utilizat în alt scop -- migrarea conținutului site-ului de pe o altă platformă non-Drupal în site-ul dvs. Drupal.
Ca experiment de gândire, să presupunem că aveți trei copii ale site-ului dvs. Drupal -- Dev, Stage și Prod -- pe un singur server (folosind trei Apache2 diferite VirtualHosts
cu DocumentRoot
setat la /var/www/dev
, /var/www/stg
, și /var/www/prd
).
În acest caz, puteți folosi sincronizare_locală
funcție definită mai jos pentru a sincroniza baza de date și fișierele dintr-un mediu superior într-un mediu inferior:
#!/bin/bash
â
function local_drush () {
dacă [[ $# -eq 0 ]]; atunci
echo "local_drush (setați mediul și executați proiectul-drush local)"
echo „Utilizare: local_drush [dev stg prd] [drush-args]”
echo „Setează mediul la dev stg sau prod, apoi trece argv la drush local.”
fi
dacă [[ $1 == 'dev' ]] || [[ $1 == 'stg' ]] || [[ $1 == 'prd' ]]; atunci
RETURN_DIR=${PWD}
cd /var/www/$1
./vendor/bin/drush ${@:2}
cd ${RETURN_DIR}
altfel
echo „Utilizare nevalidă: primul argument trebuie să fie dev, stg sau prd.”
fi
}
â
function local_sync () {
dacă [[ $# -lt 1 ]] || [[ $# -gt 2 ]]; atunci
echo "local_sync (migrați db și fișiere într-un mediu mai scăzut)"
echo "Utilizare: local_sync <SOURCE> <TARGET>"
echo „Setați mediile sursă și țintă, apoi sincronizați db și fișiere”.
fi
dacă [[ $1 == 'prd' ]] || [[ $1 == 'stg' ]]; atunci
SURSA=1 USD
dacă [[ $2 == 'stg' ]] || [[ $2 == 'dev' ]]; atunci
ȚINTĂ=2 USD
dacă [[ ( $1 = 'prd' && $2 == 'stg' ) || ( $1 = 'prd' && $2 == 'dev' ) || ( $1 = 'stg' && $2 == 'dev' ) ]]; atunci
RETURN_DIR=${PWD}
BACKUP_DIR=$HOME/sqldumps/${SOURCE}
BACKUP_FILE=${BACKUP_DIR}/${SOURCE}_$(data -I).sql
mkdir -p ${BACKUP_DIR}
SOURCE_FILES=/var/www/${SOURCE}/web/sites/default/files/
TARGET_FILES=/var/www/${TARGET}/web/sites/default/files/
EXCLUDE_CSS=${SOURCE_FILES}css/
EXCLUDE_JS=${SOURCE_FILES}js/
EXCLUDE_PHP=${SOURCE_FILES}php/
â
echo „Se creează o copie de rezervă temporară a bazei de date a mediului ${SOURCE}...”
local_drush ${SOURCE} sql:dump > ${BACKUP_FILE}
â
dacă [[ -s „${BACKUP_FILE}” ]]; atunci
echo „Se importă backupul bazei de date în mediul ${TARGET}...”
local_drush ${TARGET} sqlc < ${BACKUP_FILE}
echo „Implementarea configurației în etape pentru mediul ${TARGET}...”
local_drush ${TARGET} implementare
echo „Se copiază fișiere publice din ${SOURCE} în ${TARGET}...”
rsync --exclude ${EXCLUDE_CSS} \
--exclude ${EXCLUDE_JS} \
--exclude ${EXCLUDE_PHP} \
--delete --progress -av ${SOURCE_FILES} ${TARGET_FILES}
echo „Reconstituirea cache-urilor Drupal pentru mediul ${TARGET}...”
local_drush ${TARGET} cache:rebuild
echo „Importul de la ${SOURCE} în ${TARGET} a fost finalizat cu succes.”
echo „Se elimină backupul bazei de date a mediului ${SOURCE}...”
rm ${BACKUP_FILE}
cd ${RETURN_DIR}
altfel
echo „Eroare: ${BACKUP_FILE} nu a fost găsit, nu poate continua.”
fi
altfel
echo "Utilizare nevalidă: nu se poate copia din ${SOURCE} în ${TARGET}."
fi
altfel
echo „Utilizare nevalidă: al doilea argument trebuie să fie stg sau dev.”
fi
altfel
dacă [[ $1 == 'dev' ]]; atunci
echo „Utilizare nevalidă: nu se poate migra de la dev la un mediu superior.”
altfel
echo "Utilizare nevalidă: primul arg trebuie să fie prd sau stg."
fi
fi
}
Rețineți că sincronizare_locală
comanda depinde de local_drush
comandă, care, la rândul său, depinde de proiectele locale și de la distanță care conțin un Drush in local de site ./vendor/bin/drush
, care este metoda recomandată de instalarea Drush. Scriptul shell nu este standard, dar are avantajul de a funcționa indiferent dacă ați configurat sau nu aliasurile Drush corect.
Vă voi lăsa pe seama dvs. ca un exercițiu pentru a vă da seama cum să introduceți fișierele de pe serverul dvs. la distanță în mediul local. Nu este nimic greșit în a face toți acești pași manual sau în a folosi Filezilla pentru a transfera fișiere prin SFTP prin SSH, dar luați în considerare că rsync
comanda (la liniile 49-52) poate fi folosită cu o altă comandă ${SOURCE}
care poate fi pe un server la distanță. Singura altă schimbare pe care ar trebui să o faci ar fi și să faci rsync
cel ${BACKUP_FILE}
la localul dvs. (în jurul liniei 42).
Ha! Văd că ți-ai editat întrebarea în timp ce îmi scriam răspunsul.
Noua ta întrebare este un duplicat, răspuns Aici de Clive.
Din comentariile la acel răspuns:
Modul oficial este pentru modulele care se bazează pe vechea modalitate de a scrie în mod explicit codul pentru a face actualizările să aibă loc în hook_update_N
. Toate detaliile serioase sunt aici: https://drupal.org/node/3034742
Soluția este să instalați Actualizări de entitate de dezvoltare modul, care face vechiul drush entup
comanda disponibila.
Nu ar trebui să utilizați acest lucru în producție, dar este în regulă să îl utilizați în mediul dvs. de dezvoltare locală, atâta timp cât nu promovați DB local în mediul de producție.
Se pare că aveți această problemă doar în localul dvs., nu în producție, așa că această opțiune poate funcționa pentru dvs.
Noroc!