WordPress 환경에서 Search-Replace-DB+Shell을 사용하여 운영 환경의 DB 동기화를 해결하는지 확인합니다!흐른다

wordpress는 CMS이기 때문에 관리 페이지에서 새로운 페이지를 추가하는 스타일입니다.
아메바와 Seessa 등 블로그 서비스와 마찬가지로 디자이너에게 투고를 의뢰할 수 있기 때문에 체계적인 사람은 게시 작업을 할 필요가 없다.
와!너무 좋아요!배치할 필요가 없어서 매우 쉽다.

운영 환경에 새 템플릿을 추가하려면 다음과 같이 하십시오.


새 템플릿을 추가할 때 페이지 수는 10.20입니다...디자인도 제각각이다.
이때 발표까지의 과정은 매우 길어졌다.

Wordpress 출시 완료까지의 절차


검증 환경에 운영 데이터베이스 및 템플릿 정보 포함

DB 내의 사이트 URL을 인증 환경 URL로 변환하여 인증 환경 DB 가져오기

검증 환경에서 디자인 템플릿 제작(디자이너 작업)

운영 환경에 템플릿 업로드

데이터베이스의 사이트 URL을 운영 URL로 변환하여 운영 데이터베이스 가져오기

게시 완료

시스템 하우스 일이 많아요...


디자이너는 템플릿 제작만 완성하지만, 시스템하우스 씨가 준비하고 발표하는 작업은 심각합니다!
그리고 매번 이런 일을 하면 효율이 매우 떨어진다.

만약 이 점을 할 수 있다면 시스템 가게도 가벼워질 것이다

  • 운영 및 검증된 DB를 동기화합니다
  • 생산 및 검증된 템플릿과 이미지를 동기화합니다
  • 바로 공식과 검증의 동기화를 할 수 있다면 쉽다는 얘기다.
    이것을 만들 수 있는 물건이 있는지 찾아보니 몇 개가 있었다.

    WP에서 운영 환경을 동기화하는 방법


    Wordmove 사용: 난이도 ★★★☆


    Wordmove는 루비가 만든 도구로 Capistrano2를 기반으로 합니다.
    제가 뭘 할 수 있을까요?
  • uploads, themes,plugins 등은 부품 단위로 생산, 검증 환경을 동기화할 수 있다
  • 사이트 URL을 운영 환경 URL로 변환하여 운영 DB에 반영합니다
  • ※ 자세한 내용은 이쪽 기사를 참조하시기 바랍니다.
    http://qiita.com/akiko-pusu/items/43d87896a518233d9503
    이렇게 하면 문제가 해결된다!Q.E.D!DB 내 정렬된 웹 사이트 URL은 변환되지 않을 것으로 예상됩니다.

    Search-Iplace-DB에서 서열화된 DB 내용을 정확하게 개작하기: 난이도 ★☆☆☆


    사용자 정의 필드에 URL을 저장하면 내용이 정렬되어 데이터베이스에 저장됩니다.
    따라서 URL의 문자 수가 검증 및 운영 환경에 따라 잘못 바뀌면 PHP 오류가 발생합니다.
    PHP 오류가 발생한 예를 잘 바꾸지 못함↓
    서열화 전array('hoge.com')서열화 후a:1:{i:0;s:8:"hoge.com";}hoge.com은 staging입니다.hoge.unserialize 대신com을 사용하면...
    php > var_dump(unserialize('a:1:{i:0;s:8:"staging.hoge.com";}'));
    PHP Notice:  unserialize(): Error at offset 22 of 33 bytes in php shell code on line 1
    PHP Stack trace:
    PHP   1. {main}() php shell code:0
    PHP   2. unserialize('a:1:{i:0;s:8:"staging.hoge.com";}') php shell code:1
    bool(false)
    
    bool(false)이 돌아왔습니다!
    PHP 도구의 검색 - 데이터베이스를 복사합니다.
    다음 명령을 사용하여 DB의 URL을 한 번에 덮어씁니다.
    php srdb.cli.php -h='localhost' -u='root' -p='hoge' -n='hoge_db' -s='hoge.com' -replace='staging.hoge.com'
    
    아주 좋은 서열화된 URL도 정확하게 고칩니다!
    검증과 생산 중의 문자 수가 다르더라도 상응하는serialize 결과를 데이터베이스에 다시 저장할 수 있습니다.
    그러나 데이터베이스 내용을 직접 개작해야 하기 때문에 그 결과를 생산에 올려야 한다.
    또한 재작성 목표가 DB 검증인 경우 작업을 취소할 수도 있습니다...

    셸 + 검색 - 데이터베이스 복사 에서 데이터베이스 동기화를 한 번에 해결하는 명령:난이도 ★★★★


    Search-Reaplace-DB는 DB를 직접 덮어쓰기 때문에 검증 환경 DB의 덮어쓰기 결과를 생산 DB로 가져와야 합니다.
    이런 명령을 한 번에 내리는 방법은 껍데기를 채택해야 한다.어쩔 수 없다...
    ▶ 검증 환경에서 생산 환경으로 DB 가져오기 절차 ▼

    준비: 검색 다운로드 - 데이터베이스 복사


    git-hub에서 다음 파일을 다운로드하십시오.
    * https://raw.githubusercontent.com/interconnectit/Search-Replace-DB/master/srdb.class.php
    * https://raw.githubusercontent.com/interconnectit/Search-Replace-DB/master/srdb.cli.php

    검증에서 생산까지의 케이스 스크립트 내용


    wp-db-push.sh
    #!/bin/sh
    NOW=`date +"%Y%m%d_%H%M"`
    SEARCH=$1
    REPLACE=$2
    
    #dumpファイルの保存先
    BAK_LOCAL="/tmp/local.bk.$NOW.sql"
    BAK_REMOTE="/tmp/remote.bk.$NOW.sql"
    REPLACE="/tmp/replace.$NOW.sql"
    
    #検証環境のDBをバックアップ
    echo "mysqldump -uroot -phoge hoge_db > $BAK_LOCAL"
    mysqldump -uroot -phoge hoge_db > $BAK_LOCAL
    
    #ファイルがない場合は終了
    if [ ! -s $BAK_LOCAL ]; then
      echo "dump failed: check $BAK_LOCAL"
      exit
    fi
    
    #DB内容を書き換え
    echo "php srdb.cli.php -h='localhost' -u='root' -p='hoge' -n='hoge_db' -s=$SEARCH -r=$REPLACE"
    php srdb.cli.php -h='localhost' -u='root' -p='hoge' -n='hoge_db' -s=$SEARCH -r=$REPLACE
    
    #検証DBをdump
    echo "mysqldump -uroot -phoge hoge_db > $REPLACE"
    mysqldump -uroot -phoge hoge_db > $REPLACE
    
    #検証DBを元に戻す
    echo "mysql -uroot -phoge hoge_db < $BAK_LOCAL"
    mysql -uroot -phoge hoge_db < $BAK_LOCAL
    
    #ファイルがない場合はDBを元に戻して終了
    if [ ! -s $BAK_LOCAL ]; then
      echo "dump failed: check $REPLACE"
      echo "mysql -uroot -phoge hoge_db < $BAK_LOCAL"
      exit
    fi
    
    #本番DBに接続して、データをバックアップ(SSHで接続しない場合は-hを変えてください)
    echo "ssh [email protected] mysqldump -uroot -phoge -hlocalhost hoge_db > $BAK_REMOTE"
    ssh [email protected] mysqldump -uroot -phoge -hlocalhost hoge_db > $BAK_REMOTE
    
    #ファイルがない場合は終了
    if [ ! -s $BAK_REMOTE ]; then
      echo "dump failed: check $BAK_REMOTE"
      exit
    fi
    
    #本番環境に取り込む
    echo "ssh [email protected] mysql -uroot -phoge -hlocalhost hoge_db < $REPLACE"
    ssh [email protected] mysql -uroot -phoge -hlocalhost hoge_db < $REPLACE
    
    반대로 데이터베이스를 생산에서 검증된 케이스 스크립트로 도입하는 내용
    wp-db-pull.sh
    #!/bin/sh
    NOW=`date +"%Y%m%d_%H%M"`
    SEARCH=$1
    REPLACE=$2
    
    #dumpファイルの保存先
    BAK_LOCAL="/tmp/local.bk.$NOW.sql"
    BAK_REMOTE="/tmp/remote.bk.$NOW.sql"
    
    #検証環境のDBをバックアップ
    echo "mysqldump -uroot -phoge hoge_db > $BAK_LOCAL"
    mysqldump -uroot -phoge hoge_db > $BAK_LOCAL
    
    #ファイルがない場合は終了
    if [ ! -s $BAK_LOCAL ]; then
      echo "dump failed: check $BAK_LOCAL"
      exit
    fi
    
    #本番DBに接続して、データをダンプ(SSHで接続しない場合は-hを変えてください)
    echo "ssh [email protected] mysqldump -uroot -phoge -hlocalhost hoge_db > $BAK_REMOTE"
    ssh [email protected] mysqldump -uroot -phoge -hlocalhost hoge_db > $BAK_REMOTE
    
    #ファイルがない場合は終了
    if [ ! -s $BAK_REMOTE ]; then
      echo "dump failed: check $BAK_REMOTE"
      exit
    fi
    
    #検証DBに本番DBを取り込む
    echo "mysql -uroot -phoge hoge_db < $BAK_REMOTE"
    mysql -uroot -phoge hoge_db < $BAK_REMOTE
    
    #DB内容を書き換え
    echo "php srdb.cli.php -h='localhost' -u='root' -p='hoge' -n='hoge_db' -s=$SEARCH -r=$REPLACE"
    php srdb.cli.php -h='localhost' -u='root' -p='hoge' -n='hoge_db' -s=$SEARCH -r=$REPLACE
    
    이상입니다.
    총결산
  • 템플릿·이미지 동기화는 "Wordmove"입니다
  • DB는 "Shell+Search-Reape-DB"로 동기화됩니다
  • 나는 이런 운용을 통해 시스템점의 근무 시간을 줄일 수 있다고 생각한다.
    참고로 capistrano를 사용하여 wordpress를 배치할 때
    상술한 케이스를 함께 넣으면 행복해집니다.

    좋은 웹페이지 즐겨찾기