진행중인 사이트에서 작업하는 여러 개발자 / 편집자


28

배경

첫 번째 상당히 큰 WordPress 사이트를 구성하는 마지막 단계에 가까워지고 있으며 이제 약간의 마찰이 발생했습니다. 대부분의 경우이 사이트는 로컬 컴퓨터에서 개발되었으며 검토를 위해 변경 사항을 준비 서버로 푸시합니다 ( 자세한 내용은이 질문 참조 ). 내가 끝낸 솔루션은 단지 콘텐츠를 편집 할 때 아주 잘 작동했지만 이제는 추가 할 기능이있는 다른 사람들이 콘텐츠를 편집하고 있습니다. 아이디어는 기능과 콘텐츠가 함께 모여서 더 빨리 작업을 수행 할 수 있다는 것이 었습니다.하지만 지금은 확실하지 않습니다.

현재 준비 서버의 데이터베이스에 내 로컬 컴퓨터와 다른 내용이 있습니다. 로컬 컴퓨터에 최종 본문 복사본이 필요하지 않기 때문에 자체로는 문제가 없지만 데이터베이스에 영향을 미치는 추가 개발을 수행해야합니다 (자체 테이블이 필요한 몇 가지 플러그인 설치 / 작성).

내 질문은 :

여러 사람이 WordPress 설치에서 작업 할 수 있도록 데이터베이스 병합을 자동화하는 쉬운 방법이 있습니까? 나는 물론, 그냥 테이블 내보낼 수 알고 내 로컬 컴퓨터에 변경 및 스테이징 서버로 밀어를하지만, 내가 쓰러 뜨리하고 싶은 스테이징 서버에서 물건도 있습니다 가능성이 있습니다. 두 DB의 SQL 출력을 가져 와서 비교할 수는 있지만 지루하고 해킹적인 것처럼 보입니다. 이것이 다른 사람들이 해결 한 문제인지 궁금합니다. 이런 종류의 일을 처리 할 수있는 커뮤니티가 인정하는 방법이 있다면

감사!


다른 사이트를 폐쇄하거나 이전하기위한 투표 (Jan : 좋은 생각이 있습니까? Drupal, Joomla 또는 PHP + MySQL 기반 사이트에서 동일한 문제가 발생하기 때문에 WordPress에만 해당되는 것은 아닙니다.
John P Bloch

이미 말했듯이 로컬 스테이징 서버 대신 원격 스테이징 서버를 사용하는 것이 좋습니다.
John P Bloch

@ John P Bloch : Drupal을 사용하면 Drush와 같은 것이이 상황에서 많은 도움이 될 것입니다. 나는 장고에 개인적으로 익숙합니다.이 종류의 문제는 정착물에 의해 완화됩니다. 또한 현재 두 개의 준비 서버가 있습니다. 하나는 로컬 서버이고 다른 하나는 원격 서버입니다. 문제는 원격 컴퓨터에서 작업을 수행하지만 다른 사람들이 볼 수 있도록 서버로 푸시해야한다는 것입니다. 최종 서버는 모든 것을 함께 가질 때 설정되는 것입니다.
Gavin Anderegg

2
@ John P Bloch-이것이 좋은 질문으로 여기에 적합한 이유가 있다고 생각합니다. 지금은 대답 할 시간이 없지만 다른 사람들이 대답 할 수 있기를 바랍니다.
MikeSchinkel

1
@Gavin : 죄송합니다. 질문을 잘못 해석했습니다. 예, 프로덕션 서버의 모든 내용을 덮어 쓴 것 같습니다. : /
Zack

답변:


16

1 년 전에이 질문을했으며 그 기간 동안 더 많은 사람들을 팀에 추가하고 WordPress에서 훨씬 더 많은 사이트를 개발했습니다. 다른 사람에게 도움이 될 수 있도록 프로세스를 진행하고 싶었습니다.

힘내의 모든 것

이것은 내가 질문을했을 때 내가하고있는 일이지만이 점을 지적하는 것이 좋습니다. Git을 사용하면 생산성을 높이는 데 도움이되었을뿐만 아니라 집합적인 문제도 여러 번 절약 할 수있었습니다.

사이트에 대한 주요 구조적 리노베이션을 수행하고, 클라이언트로부터 리노베이션에 대한 승인을 받고, 리노베이션되지 않은 버전을 약간만 업데이트해야합니까? 우리는 그것을 가지고 있고 힘내 우리가 할 수 있습니다. 이 설정을 설명하는 데 약간의 시간이 걸리지 만 기본 사항은 새 분기를 만들고 해당 분기를 서버로 가져 와서 해당 하위 도메인을 해당 분기에 연결하는 것입니다.

우리는 또한 Git에 의해 구원을 받았습니다. 물론 변경 사항을 롤백 할 수도 있지만, 이전 버전의 파일을 다시 가져올 수도 있습니다. 즉, 고객이 "1 년 전에 사이트의이 부분이 어떻게 작동했는지 기억하십니까? 다시 가져올 수 있습니까?" 전에.

이 점 외에도, 필요한 파일이 없으면 절대 붙어 있지 않습니다. 우리는 항상 모든 컴퓨터에서 최신 버전의 사이트를 풀다운하고 변경을 시작할 수 있습니다.

Git을 사용하여 배포

우리는 Media Temple 에서 WordPress 호스팅을 수행 하며 정말 좋아합니다. 그들은 가장 저렴한 공급자는 아니지만 서비스는 훌륭하고 서버는 실제로 잘 설정되어 있습니다. 또한 기본적으로 Git을 제공합니다. 즉, 서버를 Git 리포지토리로 설정하고 SFTP를 사용하는 대신 변경 사항을 가져올 수 있습니다. 또한 서버에서 작업을 수행해도 덮어 쓸 위험이 없습니다 (변경 사항을 병합하여 다시 적용 할 수 있음).

BitBucket 을 Git 호스트로 사용하기 때문에 여기에 약간의 추가 작업이 필요합니다. 우선 .ssh / config 파일ssh sitename 을 사용하여 서버에 로그인하는 것과 같은 내용 을 입력 할 수 있습니다 ( 비밀번호가없는 SSH 도 사용 하므로 매우 간단합니다). 또한 항상 ssh 암호 구를 사용해야합니다 (Mac OS X에서는 암호 구를 Keychain.app에 저장할 수있어 매우 쉽습니다 ). 마지막으로 ForwardAgent 행을 가져 오려는 호스트의 .ssh / config 항목에 추가합니다. 즉, 각 서버의 공개 키가 아닌 BitBucket에 각 개인의 SSH 공개 키만 필요합니다. 또한 .git디렉토리를 공개 HTML 디렉토리보다 한 디렉토리 위에 유지해야합니다 .

자동화 된 데이터베이스 덤프

서버가 프로덕션 모드에 있는 경우를 대비하여 데이터베이스자동으로 백업해야합니다 .

모두 자신의 wp-config가 있습니다

우리는 모두 자체 로컬 데이터베이스 사용자 이름과 비밀번호를 가지고 있고 다른 이름과 서비스 메커니즘을 사용할 수 있기 때문에 각자 고유 한 wp-config 파일을 유지합니다. 이들 각각은 같은 이름으로 힘내에 저장되고 wp-config-gavin.php, 우리는 그 설정을 사용하고자 할 때, 우리는 심볼릭 링크wp-config.php(사용 힘내에 의해 무시되는 .gitignore을 ).

또한 데이터베이스 테이블 의 siteurl옵션을 다음 wp_options과 같이 재정의 할 수 있습니다 .

define('WP_SITEURL', 'http://sitename.localhost');
define('WP_HOME', 'http://sitename.localhost');

이렇게하면 WordPress가 서버 위치에 대한 데이터베이스를 보지 못하게되므로 로컬과 서버 설치간에 위치에 이상한 차이가 없습니다.

wp-config.php 파일에 대한 마지막 참고 사항 : 공개 HTML 디렉토리 위에 파일을 저장하고 웹 사용자에게만 권한을 읽도록하십시오 . 이것은 WordPress 보안에 큰 차이를 만듭니다.

데이터베이스 문제

마지막으로 문제의 고기.

내가 받아 들여야 할 것은 WordPress를 사용할 때 데이터베이스 변경 사항을 "병합"하는 좋은 방법이 없다는 것입니다. 대신, 우리는이를 해결하기 위해 행동 규칙을 개발해야했습니다. 규칙은 매우 간단하며 지금까지 우리에게 잘 적용되었습니다.

개발하는 동안 사이트를 "소유"하는 사람이 한 명 있습니다. 그 사람은 일반적으로 설정을 수행합니다 (호스팅 패키지를 함께 가져 와서 Basecamp 프로젝트 시작, 디자인 슬라이싱 등). 그 사람이 합리적인 시점에 도달하면 WordPress 설치를 위해 데이터베이스를 덤프하여 Git에 넣습니다. 그 시점부터 개발을 수행하는 모든 사람이 해당 데이터베이스 덤프를 사용하며 소유자는 데이터베이스를 변경하는 유일한 사람입니다.

사이트 빌드가 조금 더 진행되면 사이트가 서버에 배치됩니다. 그 시점부터 서버의 데이터베이스는 정식입니다. 모든 사람 (소유자 포함)은 서버에서 모든 데이터베이스를 변경하고 로컬 개발 및 테스트를 위해 변경 사항을 풀어야합니다.

이 과정은 완벽하지 않습니다. 개발 중에 워드 프레스 백엔드를 로컬에서 변경 한 다음 프로덕션 환경에서 다시 변경해야 할 수도 있습니다. 그러나 우리는 그런 종류의 일이 드물다는 것을 알았습니다.이 과정은 우리에게 상당히 효과적입니다.


1

나는 그런 설치 작업을하고 전에 이와 같은 질문에 대답했다 . 아래는 이런 종류의 작업에 대한 선호 설정입니다. 기존 데이터베이스를 바꾸지 않고 데이터베이스를 병합하고 싶기 때문에 하려고하므로 MySQL 덤프를 수행 할 때 --add-drop-table 플래그 .


  • 1 단계. Mysqldump 개발 데이터베이스
  • 2 단계. development.domain.com의 모든 인스턴스를 production.domain.com으로 교체합니다 ^^
  • 3 단계. MySQL에 로그인하고 SOURCE 명령을 실행하여 데이터를 가져옵니다. 예 : source /path/to/file

^^ 기존 도메인의 모든 인스턴스를 새 것으로 교체하는 방법 : (1) 아래 스크립트를 복사하십시오. (2)chmod +x 그것. (3) 실행하십시오.

용법: ./script.sh development-dump.sql > production-dump.sql

#!/bin/sed -f
s/'\([^\\']*\)development.domain.com\([^\\']*\)'/'\1production.domain.com\2'/g

2
sed는 이전에 직렬화 된 mysql 덤프 내부에서 인코딩 된 데이터를 처리 할 수 ​​없습니다.
hakre

당신이 전에 대답 한 질문은 실제로 내 것입니다 :) 나는 다른 질문을하고있는 것처럼 느낍니다. 내가 작업 할 때 전체 DB를 덤프하는 것이 좋습니다. 그러나 위에서 설명한 상황에서 그렇게하면 다른 사람들의 변경 사항을 덮어 쓰거나 내 자신의 변경 사항을 덮어 씁니다. 여러 사람이 WordPress 인스턴스에서 작업함에 따라 변경 사항을 결합하려고합니다.
Gavin Anderegg

1

나는 지금이 같은 문제에 대한 다른 해결책을 실험하고 있습니다. 확실히 까다로운 것입니다.

내 현재 솔루션은 --skip-extended-insert 플래그를 사용하여 로컬 mysql 덤프를 수행하는 것입니다. 이 플래그로 인해 데이터베이스의 모든 행에 대해 레코드 삽입 명령문이 생성되어 덤프를 좀 더 병합하기 쉽게 만듭니다. 이 기사에서 그 트릭을 선택했습니다. http://www.viget.com/extend/backup-your-database-in-git/ .

그런 다음 사이트의 소스 파일과 함께 Git을 사용하여 결과 .sql 데이터 덤프 파일을 소스 제어합니다. 다른 개발자가 코드 변경 사항을 풀다운하면 .sql 파일도 함께 변경됩니다. 그런 다음이 파일을 로컬 버전의 데이터베이스로 가져옵니다. MAMP를 사용하여 두 시스템에서 각각의 로컬 데이터베이스를 동일한 방식으로 설정 했으므로 검색 및 교체가 필요하지 않습니다.

병합 문제가 발생하여 데이터베이스 변경을 유발할 수있는 모든 것에 "테이크 턴"접근 방식을 채택하려고합니다. Wordpress에서 데이터베이스를 변경하는 작업을 수행하기 전에 최신 덤프를 확인하고 가져 와서 가져 와서 확인하고 체크인 할 때까지 DB를 변경하지 말 것을 요청하십시오. 이것은 분명히 이상적이지 않으며 더 나은 솔루션을 찾고 있지만 시작입니다. 또한 우리에게 DB의 버전 제어를 제공합니다.

서버에서 공유 dev 데이터베이스를 설정하고 SSH 터널링을 통해 웹 사이트의 로컬 사본을 모두 동일한 DB에 연결하려고 할 수 있습니다. 그러나이 접근법은 우리 중 하나가 플러그인을 설치할 때마다 문제가 발생합니다. 기본적으로 PHP 파일과 MySQL DB는 동기화되지 않습니다.

다른 사람들이이 문제를 어떻게 다루고 있는지 듣고 싶습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.