web-dev-qa-db-ja.com

進行中のサイトで作業する複数の開発者/編集者

背景

私は最初のかなり大きなWordPressサイトを構築する最終段階に近づいていますが、今は摩擦に直面しています。ほとんどの場合、サイトはローカルマシンで開発され、レビューのために変更をステージングサーバーにプッシュします( 詳細についてはこの質問を参照してください )。私がコンテンツを編集しているだけのとき、私が最終的に解決したソリューションは非常にうまくいきましたが、今では追加する機能がありながら、他の人がコンテンツを編集しています。アイデアは次のとおりです。機能とコンテンツが一致して一緒になった場合、より迅速に物事を成し遂げることができました...

現在、ステージングサーバーのデータベースには、ローカルマシンのデータベースとは異なるコンテンツがあります。ローカルマシンに最終的なボディコピーは必要ないので、それ自体は問題ありませんが、データベースに影響する開発をさらに行う必要があります(独自のテーブルを必要とするプラグインをさらにインストール/作成します)。

私の質問は:

複数の人がWordPressインストールで作業できるように、データベースのマージを自動化する簡単な方法はありますか?もちろん、ローカルマシン上でを知っている変更したテーブルをエクスポートしてステージングサーバーにプッシュすることもできますが、ステージングに何かがある可能性もありますサーバーを停止します。両方のDBのSQL出力を取得し、それらを比較することができました...しかし、それは退屈でハックのようです。これは他の人が解決した問題なのだろうかと思っています。この種のことを処理するためにコミュニティが受け入れた方法がある場合。

ありがとう!

28
Gavin Anderegg

私は1年以上前にこの質問をしました、そしてその間に私たちは私たちのチームにもっと多くの人を加え、WordPressでもっとたくさんのサイトを開発しました。それが他の誰かを助けるかもしれない場合のために私は私達のプロセスを歩きたかった。

Gitのすべて

質問してもこれは私がしていたことですが、これを指摘するのは良いことです。 Gitを使用すると、生産性が向上するだけでなく、集合的な評価も数回節約されます。

あなたは今までにサイトへの大きな構造的な改修を行い、クライアントからそれらの改装の承認を得る必要があり、そしてその間ずっと改装されていないバージョンへのマイナーなアップデートをする必要がありますか?我々は持っています、そしてGitはそれをさせてくれました。この設定を記述するのは少し時間がかかりますが、基本は、新しいブランチを作成し、そのブランチをサーバにプルアップし、そのブランチにサブドメインをアタッチしたことです。

私達はまたGitによって救われました。もちろん、変更をロールバックすることもできます。これは素晴らしいことですが、古いバージョンのファイルを元に戻すこともできます。つまり、クライアントが「1年前にこのサイトのどの部分が機能していたか覚えていますか。それを元に戻すことができますか?」と答えると、答えは「はい」です。前。

これらの点以外に、必要なファイルがないと動けなくなることもありません。私たちはどんなマシンからでも常に最新バージョンのサイトをダウンロードして変更を始めることができます。

Gitを使ってデプロイする

私たちは Media Temple でホスティングしているWordPressをやっています、そして私たちは本当にそれらが好きです。彼らは最も安いプロバイダーではありませんが、彼らのサービスは素晴らしく、そして彼らのサーバーは本当にうまくセットアップされています。また、デフォルトでGitを提供します。つまり、SFTPを使用する代わりに、サーバーをGitリポジトリとして設定し、その方法で変更を引き出すことができます。また、サーバー上で作業を行っても上書きされる危険がないということです(これらの変更はマージされて元に戻される可能性があるため)。

Gitホストとして BitBucket を使用しているので、ここではもう少し作業が必要です。まず最初に .ssh/config files を使用して、ssh sitenameのようにタイプしてサーバーにログインできるようにします(これも非常に簡単な パスワードなしのSSH を使用します)。また、常に sshパスフレーズ を使用するようにしてください(Mac OS Xでは、これを パスフレーズをKeychain.appに保存できるようにする とすると非常に簡単になります)。最後に、取得したいホストの.ssh/configエントリにForwardAgent行を追加します。つまり、BitBucketには各自のSSH公開鍵しか必要ではなく、各サーバーの公開鍵は必要ありません。また、.gitディレクトリをパブリックHTMLディレクトリの1ディレクトリ上に配置するようにしてください。

自動データベースダンプ

サーバーがプロダクションモードになったら、 万が一のためにデータベースを自動的にバックアップする を確実にします。

誰もが自分のwp-configを持っています

私たち全員が私たち自身のローカルデータベースのユーザー名とパスワードを持っているので、そして私たちは異なる名前と提供メカニズムを使うことができるので、私たちはそれぞれ私たち自身のwp-configファイルを保持します。これらはそれぞれwp-config-gavin.phpのような名前でGitに格納され、その設定を使いたいときは symlinkwp-config.phpにします(これは .gitignore を使ったGitでは無視されます)。

これにより、wp_optionsデータベーステーブルのsiteurlオプションを次のようにオーバーライドすることもできます。

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

これはWordPressがデータベースを見てサーバーの場所を探すのを防ぎ、ローカルインストールとサーバーインストールの間に奇妙な違いがないことを意味します。

Wp-config.phpファイルに関する最後の注意: それらをパブリックHTMLディレクトリの上に保存し、パーミッションをWebユーザに対してのみ読み取り可能にする を必ず行ってください。これはWordPressの安全性に大きな違いをもたらします。

データベースの問題

最後に、問題の肉。

私が受け入れなければならなかったのは、WordPressを使用しているとき、データベースの変更を「マージ」するための良い方法がないということです。代わりに、これを解決するために行動規範を開発する必要がありました。ルールはかなり単純で、これまでのところ私たちによく役立っています。

開発中、そのサイトを「所有」している人は1人だけです。通常その人がセットアップを行います(ホスティングパッケージをまとめて、Basecampプロジェクトを開始し、デザインをスライスし、そのようなことをします)。その人が合理的なポイントになったら、WordPressインストール用のデータベースをダンプし、それをGitに入れます。それ以降、開発を行っている人は誰でもそのデータベースダンプを使用し、所有者だけがデータベースに変更を加えます。

サイトの構築がもう少し進めば、そのサイトはサーバーに置かれます。それ以降、サーバーのデータベースは正規のものになります。誰でも(所有者を含む)サーバー上ですべてのデータベース変更を行い、その変更をローカル開発およびテスト用に引き下げる必要があります。

このプロセスは完璧ではありません。誰かが開発中にWordPressバックエンドでローカルに変更をしなければならなくて、それから本番環境でそれらの変更を再びしなければならないかもしれません。しかし、そのようなことはまれであることがわかりました。このプロセスは、私たちにとってはかなりうまくいきます。

16
Gavin Anderegg

私は今、この同じ問題に対するさまざまな解決策を試しています。それは間違いなくトリッキーなものです。

私の現在の解決策は--skip-extended-insertフラグを使ってローカルのMySQLダンプをすることです。このフラグによってデータベースのすべての行に対してinsert record文が生成され、ダンプがもう少しマージしやすくなります。私はこの記事からそのトリックを拾いました: http://www.viget.com/extend/backup-your-database-in-git/

次に、サイトのソースファイルと一緒にGitを使用して、結果の.sqlデータダンプファイルをソース管理します。他の開発者がコードの変更を引き下げると、それと共に.sqlファイルが入ります。その後、彼はこのファイルを自分のローカルバージョンのデータベースにインポートします。 MAMPを使用して、両方のマシンにそれぞれローカルデータベースを同じように設定したので、検索や置換を行う必要はありません。

マージの問題があるため、データベースの変更を引き起こす可能性があるものすべてに対して「順番を変える」アプローチを採用しようとしています。データベースを変更するWordPressで何かをする前に、彼が自分の最新のダンプをチェックインし、それを引っ張ってそれをインポートすることを確かめ、そして私が作ってチェックインするまでDBの変更をしないように頼む。これは明らかに理想的ではなく、私はより良い解決策を探していますが、それは始まりです。それはまた私達にNiceであるDBのバージョン管理を与えます。

私は、サーバー上に共有開発データベースを設定し、SSHトンネリングを介してWebサイトのローカルコピーを両方とも同じDBに接続してみます。しかしながら、このアプローチは私達の一人がプラグインをインストールするときはいつでも問題にぶつかるでしょう。基本的にPHPファイルとMySQL DBは同期していません。

私は他の人がこの問題にどのように対処しているか聞いて熱心です。

1
Yaron

私はそのようなインストールに取り組み、 以前にこのような質問に答えた を持っています。以下はこの種の作業のための私の好みの設定です。既存のデータベースを置き換えるのではなくデータベースをマージしたいので、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
1
editor