Någonsin undrat hur du kan använda Version Control med WordPress? Om du föredrar att arbeta på dina WordPress-projekt lokalt men måste få dem att synkronisera på distans, är denna handledning för dig. Du har förmodligen försökt synkronisera mellan de två inställningarna genom att manuellt ladda upp de ändrade filerna och använda PHPmyAdmin för att exportera och importera din databas en gång ändrats och (mycket troligt) bröt något i processen. I denna handledning ska vi automatisera synkroniseringsprocessen; så du kan koncentrera dig på vad du ska göra istället för brottning med oändliga migreringar.
Vi startar vanligtvis WordPress-utveckling på våra lokala maskiner. Det är alltid snabbare och enklare, särskilt när du har en långsam internetanslutning. Men det finns tillfällen när du behöver jobba på distans. Du kanske vill göra en liten förändring, fixa några vadderingar eller helt enkelt publicera ett nytt inlägg. Ändringarna sparas inte i din WordPress lokala maskininstallation och det är när roten börjar.
Rösen startar eftersom du kan behöva släppa en ny version, och eftersom du jobbar lokalt måste ändringar som du gjort fjärrstyrts tas bort. Det är en verklig smärta. Du måste ta reda på vilka filer du ändrade och ladda ner / FTP dem. Ibland sker förändringarna i databasen, så du behöver ett speciellt verktyg som phpmyAdmin för att få ändringarna.
I processen kan du bryta något eller glömma en ändring. Det är då allt blir rörigt. I det här fallet behöver du två saker: versionskontroll och synkronisering. I denna handledning kommer jag att beskriva den lösning som jag följer för att organisera min utveckling och synkronisering mellan min lokala maskin och min fjärrserver.
Låt mig först förklara vad vi ska göra. Vårt mål är att synkronisera lätt mellan fjärrkontrollen och den lokala versionen. Du arbetar i vilken version du vill och gör dem identiska. För att göra det måste vi först redovisa skillnader mellan fjärrkontrollen och den lokala inställningen.
WordPress lagrar information om din blogg i både statiska filer och din databas. En del av denna information är i förhållande till din nuvarande webbhotell. Därför kommer det inte att fungera när du laddar upp hela WordPress-katalogen och ersätter fjärrversionen.
Informationen splittras olyckligtvis i två delar:
För wp-config.php, implementerar vi en process som upptäcker om vi befinner oss i den lokala eller fjärrservern. På så sätt fungerar samma fil i båda miljöerna. För databasen integrerar vi den med versionsstyrningssystemet och uppdaterar den för att matcha lokala eller fjärrvärdinställningar.
Jag använder Mercurial för versionskontroll. Git är mer populärt i webbutvecklingsarenan, men i vårt fall är de nästan lika: Du behöver bara ett versionsverktyg.
Välj Mercurial om du är på en Windows-maskin. Det har Sköldpadda, ett användarvänligt gränssnitt, för att hantera dina förråd. Verktyget för versionskontroll måste installeras på både lokala och fjärranslutna maskiner. Med det sagt måste du ha en dedikerad server eller en VPS för att kunna installera program från tredje part.
För att initiera ett förråd i Mercurial skriver du följande i konsolen
cd / mydev_directory hg init hg lägg till hg commit
I första raden ändrar vi vår arbetsmapp till mappen som vi vill aktivera versionskontroll i. Det här blir din WordPress-katalog (där du installerar WordPress). Nästa rad initierar förvaret. Den tredje raden berättar mercurial till versionskontroll av alla filer i katalogen. Detta kommer även att innehålla undermappar. Den sista raden skapar en ny ändring i katalogen; Din textredigerare öppnas, och du kommer att bli uppmanad att skriva en beskrivning av detta engagemang.
Denna handledning täcker inte hur man använder Mercurial. Om du inte vet versionskontroll, bör du lära dig det. Det är ett viktigt verktyg för att lägga till dina färdigheter. Här är några tutorials som jag föreslår:
Vi kommer att göra en ny installation av WordPress i vår lokala maskin. Ladda ner den senaste WordPress-versionen, ta ut den i en tom katalog efter eget val på din webbserver och installera den från din webbläsare eller genom att ändra wp-config.php-filen.
Nu ska vi aktivera versionskontroll i vår WordPress-katalog
cd / testpress Hg init Hg lägg till Hg commit
Dessa kommandon initierar förvaret och skapar den första ändringen. Nu kan vi enkelt klona det här förvaret på vår server, installera WordPress och kunna synkronisera fram och tillbaka mellan lokal och fjärransluten.
Det finns emellertid skillnader som vi sa tidigare. Innan vi implementerar synkroniseringsprocessen måste vi implementera ett skript som kontrollerar var installationsprogrammet körs och laddar rätt inställningar.
Inställningarna som behöver ändras är databasinformationen. De finns i wp-config.php-filen och WordPress laddar dem från den här filen. Min lokala version ser ut så här
// ** MySQL-inställningar - Du kan få denna information från din webbhotell ** // / ** Databasens namn för WordPress * / define ('DB_NAME', 'test'); / ** MySQL databas användarnamn * / define ('DB_USER', 'root'); / ** MySQL-databas lösenord * / define ('DB_PASSWORD', 'xxxxx'); / ** MySQL värdnamn * / define ('DB_HOST', 'localhost'); / ** Databascharset som ska användas för att skapa databastabeller. * / define ('DB_CHARSET', 'utf8'); / ** Databas-sorteringstypen. Ändra inte detta om du är osäker. * / define ('DB_COLLATE', ');
Observera att jag bara kopierade den del som gäller. På min fjärrserver ska denna del skilja sig något
// ** MySQL-inställningar - Du kan få denna information från din webbhotell ** // / ** Databasens namn för WordPress * / define ('DB_NAME', 'user_blog'); / ** MySQL databas användarnamn * / define ('DB_USER', 'root'); / ** MySQL databas lösenord * / define ('DB_PASSWORD', 'xyxyx'); / ** MySQL värdnamn * / define ('DB_HOST', 'localhost'); / ** Databascharset som ska användas för att skapa databastabeller. * / define ('DB_CHARSET', 'utf8'); / ** Databas-sorteringstypen. Ändra inte detta om du är osäker. * / define ('DB_COLLATE', ');
Tricket är att skriva en kod som upptäcker var WordPress finns. Variabeln som används är PHP-variabeln _SERVER [ "HTTP_HOST"]. Koden utvärderar variabeln och tilldelar databasinställningarna.
/ * * Unified variables * / $ user_name = 'root'; $ hostname = 'localhost'; $ charset = 'UTF-8'; $ collate = "; / * * Sök efter den aktuella miljön * / if ($ _SERVER [" HTTP_HOST "] === 'onlineqrlab.com') $ db_name = 'user_wordpress'; $ password = 'xyxyxy'; else $ db_name = 'test'; $ password = 'xxxxxx' // / ** Databasens namn för WordPress * / define ('DB_NAME', $ db_name); / ** MySQL databas användarnamn * / define ('DB_USER', $ user_name); / ** MySQL databas lösenord * / definiera ('DB_PASSWORD', $ lösenord); / ** MySQL värdnamn * / define ('DB_HOST', $ värdnamn); / ** Databascharset som ska användas för att skapa databastabeller. * / define ('DB_CHARSET', $ diagramset) ; / ** Databas sortera. Ändra inte detta om du är osäker. * / Define ('DB_COLLATE', $ collate);
I exemplet ovan har jag bara två parametrar som ändrats: Databasnamn och lösenord. Du kanske har mer än det. Om du till exempel hostar mySql på en extern server måste du ändra värdnamnet för inställningen av fjärrserver. Du skulle också kunna begränsa tillgången på WordPress-bloggen till användarnivå med begränsade funktioner i stället för administratörsnivå.
Kontrollera att din lokala version av WordPress fungerar. Om det gjorde så är du halv klar!
Du kan börja arbeta nu med din lokala WordPress-installation. Varje gång du gör en större ändring gör du en förbindelse med Mercurial för att spåra ändringarna. På fjärrservern, om du antar att du har installerat Apache, skapar du en ny mapp där du laddar upp ditt WordPress-arkiv.
cd / apache mkdir mywp_repo cd mywp_repo
Observera att dessa kommandon ska utföras på din fjärrserver. Du behöver SSH-åtkomst och en kommandorad också. Jag använder Putty på Windows för att ansluta till min server.
När vårt förråd är initialiserat kan vi trycka (ladda upp) och dra (hämta) ändringar från andra repositories för att hålla den uppdaterad. För att processen ska kunna ske måste du antingen din lokala eller fjärranslutna server publicera förvaret så att du kan dra / trycka på den.
Mercurial webbserver saknar några viktiga funktioner som åtkomstkontroll, autentisering och SSL. Så det är osäkert att använda det på din fjärrserver. Företrädesvis måste du köra Mercurial webbservern lokalt och dra ändringarna från den lokala servern till fjärrservern.
För att köra Mercurial-servern skriver du följande i din lokala maskin:
hg tjäna
Nu borde du kunna komma åt ditt förråd från din webbläsare. Ange webbadressen som visas på din kommandorad. Vanligtvis är det localhost: 8000. Förvaret finns också tillgängligt online. Du kan komma åt den från vilken dator som helst som är ansluten till internet med hjälp av din adressadress: 8000.
Hg pull 192.xxx.xxx.xxx:8000 Hg uppdatering
Men jag rekommenderar inte den här metoden eftersom den inte är säker. Det finns ett enkelt och säkert sätt att göra det. Det är ett mellanslag som är värd för en tredjeparts tjänst. Jag använder BitBucket. Den har en bra och pålitlig service och erbjuder även buggar och en wiki.
Registrera och skapa ett konto i BitBucket. De erbjuder obegränsade privata och offentliga repositories med upp till 5 användare gratis. Skapa ett nytt förvar i BitBucket och du borde tas till den här sidan.
BitBucket har HTTPS och SSH support. Om ditt förråd är privat, som i mitt fall, måste du autentisera med ditt användarnamn och lösenord för att kunna trycka och dra från förvaret.
När du har skapat ditt nya arkiv i BitBucket, kör följande kommandon i din lokala dator
hg tryck https: //[email protected]/username/repository
Du kommer att bli ombedd att lämna ditt lösenord och förvaret laddas upp till BitBucket. Efter uppladdning till BitBucket klonar du förvaret till din fjärrserver.
hg klon https: //[email protected]/username/repository hg uppdatering
Kloning ladda ner filerna till en ny katalog (med namnet som detsamma som din arkivkatalog); Du kan byta namn på den här katalogen. Detta gör det första steget i det här avsnittet (där vi skapade WordPress setup-katalogen) ganska föråldrad.
Tänk på BitBucket som mellanman mellan din dator och din fjärrvärd. Det är möjligt att ha en egen säker Mercurial-server på din fjärrserver, men detta ligger utanför handledningen. Fördelen är att vara oberoende av mellanmannen. Detta gör det möjligt att skicka ändringar direkt till din webbserver.
Så hur är det här bättre än FTP?
Redan trött? Oroa dig inte, vi är nästan där. När du har flyttat förvaret antingen från din lokala dator eller BitBucket måste du köra WordPress-installationen igen. den här gången på fjärrserverns webbplats. Se till att de inställningar du lägger i filen wp-config.php som vi gjorde tidigare är korrekta, och ladda din WordPress-fjärrwebbplats.
Du kommer att bli ombedd att installera din WordPress-blogg igen, det beror på att din databas är tom. Efter installationen är din WordPress-blogg klar. Du kan göra ändringar i fjärr- eller lokalversionen och synkronisera dem med Mercurial.
Men det är fortfarande en viktig fråga: Databasen synkroniseras inte med filerna. Detta är viktigt eftersom saker som blogginlägg, kommentarer, plugin-anpassade tabeller? kommer inte att vara densamma i den lokala och fjärranslutna versionen.
WordPress har en import / export funktion. Men det är inte användbart, eftersom det inte gör en riktig synkronisering. Vad du behöver är att gå till din phpmyadmin, exportera alla dina WordPress-tabeller i ena sidan (fjärrkontroll eller lokalt) och gå sedan till andra sidan phpmyadmin och ersätt tabellerna.
Efter detta gör dina WordPress-databaser samma. Du måste ändå ändra platsen site_url i wp_options-tabellen. Denna process blir smärtsam då databasen blir tyngre.
Som vi såg tidigare är databasen lite problematisk. Det blir inte synkroniserat med filerna, det är svårare att nå och kräver uppdatering av två fält varje gång du synkroniserar. Det är inte kul att göra det om och om igen. Automatisering är lösningen; Det är faktiskt vårt jobb.
Vad vi behöver är ett skript som synkroniserar de lokala och avlägsna databaserna utan att bryta någonting. Tanken som kom till mig är att inkludera databasen i revisionskontrollen. Databasinnehållet exporteras till en fil som spåras av revisionskontrollen. Varje gång vi gör ändringar kommer databasinnehållet att ersättas av den här filen, vilket gör vår databas uppdaterad.
Eftersom det finns ett par rader som skiljer sig från en värd till en annan (webbplatsens webbadress och hemsidaadress) behöver vi ett annat mysql-skript som uppdaterar dessa med rätt värden.
En annan viktig sak är konflikter. Om du arbetar och gör ändringar (förbinder) till både fjärrkontrollen och den lokala versionen skapar det konflikt. Ett typiskt scenario är när du arbetar och förbinder dig med din lokala version, och någon (online) lägger till nytt innehåll på din blogg. Jag kan inte hjälpa till i denna situation, du behöver lära dig mer om Mercurial (eller ditt revisionskontrollsystem) sammanslagning och lagarbete.
För att undvika konflikter, se till att du tar bort förvaret från BitBucket innan du gör ändringar. och också att begå och driva ändringarna till BitBucket efter att de har gjorts. Detta säkerställer att BitBucket alltid har den senaste versionen, och du arbetar också med den senaste versionen.
Det här steget är lite känsligt, så se till att du följer stegen noggrant. Först ska jag förklara hur slutlösningen fungerar. Du kommer att ha två skript: tryck och dra. Beroende på ditt operativsystem kommer det att vara push.sh och pull.sh (Linux) eller push.bat eller pull.bat (Windows). Jag använder fjärrkontrollen lokalt och Linux (Ubuntu), så den här handledningen täcker båda operativsystemen.
Det första skriptet kommer att trycka på ändringarna till Bitbucket-servern. När du gör några databasändringar, använd push-skriptet för att ladda upp ändringarna till ditt BitBucket-arkiv. Push kommer att dumpa den aktuella databasen till en fil (/db/db_sync.sql) som spåras av versionsstyrsystemet. Filen kommer att tryckas tillsammans med de andra filerna och laddas upp till BitBucket.
Det andra skriptet kommer att dra ändringarna från Bitbucket-servern. Drascriptet läser också filen (/db/db_sync.sql) och ersätter databasen. Detta uppdaterar databasen med den version du tryckte med. Eftersom de har olika värdnamn kommer dragskriptet att ändra de nödvändiga fälten, nämligen webbadressen och hemsidan url.
På den fjärranslutna och lokala servern skapar du en ny katalog som heter "db". Den exporterade databasfilen sparas där. På din lokala server (jag antar att du använder Windows) skapa en ny fil som heter push.bat. Det spelar ingen roll om var du lägger filen (se till att du använder rätt vägar). Jag lägger filen i rotkatalogen i mitt WordPress-arkiv.
mysqldump -u användarnamn -ppassword databasnamn> db / db_sync.sql hg lägg till db / db_sync.sql hg commit hg push https: //[email protected]/username/repository
Du kan ta bort kommandot "hg add db / db_sync.sql" efter att ha kört manuset för första gången. Detta krävs bara en gång.
På serverns sida (Linux / Ubuntu) är sakerna inte riktigt annorlunda. Filförlängningen ändras från .bat till .sh, och eventuellt ditt mySql-server användarnamn, lösenord och databasnamn. Filinnehållet är exakt detsamma.
Att dra är lite svårare. Det krävs att du importerar SQL-filen och även ändrar vissa kritiska fält som skiljer sig från en miljö till en annan.
Skapa en fil med namnet pull.bat i din lokala dator
hg pull https: //[email protected]/username/repository hg uppdatering cd db mysql -u användarnamn -ppassword testpress < db_sync.sql mysql -u username -ppassword testpress < db.sql
Lägg till en fil med namnet "db.sql" i din db-mapp. Den här filen har SQL-satser som gör de ändringar som krävs för att matcha värdinställningarna. Du kan lägga till fler uttalanden om du behöver.
ANVÄND testpress; UPPDATERA wp_options SET option_value = "http: // localhost / testpress" VAR alternativ_name = "siteurl"; UPPDATERA wp_options SET option_value = "http: // localhost / testpress" VAR alternativ_name = "hem";
Bortsett från filtillägget ändras inte mySql-inställningar och databasnamn något på fjärrservern. Detta beror på att vi kör programkommandon. Kommandona och deras användning är plattform agnostic. Se till att du anger de korrekta värdena för webbadressen till webben i filen "db.sql". De borde matcha din bloggadress, om du inte är säker på att du kan kontrollera värdena i wp_options-tabellen.
För att köra skriptna, dubbelklicka i Windows på? .Bat? fil och i din fjärrserver terminal kör kommandot? sh script_name.sh?.
Du borde nu ha 2 körbara filer i varje miljö (dra och tryck). Du bör också ha ett SQL-script (db.sql) som inte får läggas till versionskontroll. Vi kan nu testa vårt lilla system.