WordPressマルチサイトインスタンスを2番目の場所にコピーした後のDB接続エラー


11

これが私の設定です。http://example.comで実行されているマルチサイトインスタンスがあり、開発とステージングを実行したいと考えています。WPの既存のマルチサイトインスタンスをlocalhostに移動することは悪夢なので、代わりにステージング場所でdevを実行します。

ホスティングアカウントの/ public_html / staging /ディレクトリを指すようにhttp://staging.example.comを設定し、すべてのWPファイルをルートから/ staging /ディレクトリにコピーしました。データベースファイルもコピーし(SQLダンプ、テーブルを新しいデータベースにインポートし)、新しいデータベースを指すようにwp-config.phpファイルを変更しました。

SQLを実行してデータベースレコードを変更した後、wp-config.phpファイルの次の1行も変更します。

/** Turning on WordPress MU, new in 3.0 */
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false );
$base = '/';
define( 'DOMAIN_CURRENT_SITE', 'example.com' ); // <- I change this line
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

変更:

define( 'DOMAIN_CURRENT_SITE', 'staging.example.com' ); // <- now changed

http://staging.example.comをロードすると、... Error establishing database connection

ユーザー名とパスワードをチェックしてトリプルチェックし、ユーザーが新しいステージングデータベースに対するすべての権限を持っていることを確認し、DBHOSTを「localhost」のままにしました(ただし、staging.example.comに変更しても変更されませんでした)ヘルプ、どちらか)。

データベース接続が失敗するのはなぜですか?誰でも?(事前にご協力いただきありがとうございます。)

注意: http : //example.comは、データベースが異なるだけで、非常によく似たdb接続設定で正常に動作しているため、データベースサーバーがダウンしても問題はありません。


うーん。誰もいないね 確かに、それは奇妙なエラーです。
Jason Rhodes

Wordpressネットワークをインプレースで移行しようとすると、同じエラーが発生します-ホストが移動しませんでした
Mikko Ohtamaa

OK。私は、様々な故障モードを突き止め、それらのブログの記事を作った:opensourcehacker.com/2011/08/22/...
ミッコOhtamaa

回答:


2

1つの考え-www.example.com/staging/wp-adminにアクセスすると、自動的にwww.example.com/wp-adminにリダイレクトされます

staging.example.comからexample.com/stagingへのリダイレクトが既存のインストールと競合する可能性はありますか?

更新:.htaccessの問題とデータベース内の複雑なドメイン参照に関連している可能性があるようです

WP Codexから:

WordPressマルチサイトの移動

データベース自体にはサーバー名やフォルダーの場所への複数の参照があるため、マルチサイトの移動ははるかに複雑です。

マルチサイトを移動する最良の方法は、ファイルを移動し、.htaccessおよびwp-config.phpを編集して(マルチサイトを含むフォルダー名が変更された場合)、データベースを手動で編集することです。ドメイン名のすべてのインスタンスを検索し、必要に応じて変更します。このステップはまだ簡単に自動化できません。マルチサイトをあるフォルダーから別のフォルダーに移動する場合は、wp_blogsエントリーを編集して、フォルダー名を正しく変更する必要があります。


11

私はそれを解決し、それはうまくいった :)

ではwp_blogs、テーブル、

古い構造

Domain : localhost/smart_facility_linux
Path : /

しかし、私はそれを次のように機能するように変更しました:

ルートサイトの場合:

Domain : localhost
Path : /smart_facility_linux/

サブサイト1の場合(メインサイトの下の任意のサブサイト、私は例を挙げただけです):

Domain : localhost
Path : /smart_facility_linux/subsite1/

残念ながら私にはうまくいきませんでした。これは、WPのデータベースで絶対パスを使用する愚かさの完璧な例です。
ペグ

@Peguesそれはここで10人以上の人々のために機能しました:)
Pratik

1
それが他の人のために働いたことを嬉しく思います。これは非常に多くの人にとっては機能しません-私が調査したところ、サブドメインからサブディレクトリに切り替えるときにdb値に違いがあるためです。そして、私の最初のコメントに対して、絶対パスの使用はWPでは賢明ではありません。今までにない、そして多くの問題の原因です。また、CI / CDパイプラインを使用して適切なワークフローを設定することは、企業レベルでは実際には不可能です。
ペグ

2

私が見つけたドメインまたはホストを簡単に移管する方法は本当に1つしかありません。単一サイトとマルチサイトのインストールで、問題なく動作します。

  1. データベースを.sqlファイルにエクスポートします。(これにはPHPMyAdminを使用します)
  2. 編集するファイルの新しいコピーを少し異なる名前で作成します。
  3. 任意のテキストエディターでファイルを開きます>(たとえば、gedit)
  4. ドメインで検索/置換を実行し、本番から開発への絶対パス(/ home / username / public_html /から/ home / username / public_html /)を実行します。
  5. ファイルを保存します。
  6. インストール全体を開発ディレクトリにコピーします。
  7. 次の行をwp-config.phpファイルに追加します。

    define( 'RELOCATE'、true);

  8. ログインして、パーマリンク設定を保存します。

  9. wp-config.phpに配置した定義ルールを削除します。


1
ウィジェットやテーマオプションなどのシリアル化されたデータ内の文字列を、長さの異なる文字列に置き換える場合を除いて、これは正常に機能します。シリアル化されたデータは次のようになります-s:76: "hxxp://www-dev.example.com/wp-content/uploads/company_logo_swoosh.gif '' s:70:" hxxp://www.example.com/ wp-content / uploads / company_logo_swoosh.gif '(注:長さ76と70は表示された文字列に対応しなくなりました。サイトの詳細を編集して、新しい文字数を追跡していませんでした。)唯一の解決策は、カウントを手動で更新するか、ステージングドメインの長さを同じに保ちます。
marfarma

また、ttをxxに置き換えて、URLが不明瞭にならないようにしました。これらの違いを確認できませんでした。
marfarma 2011

知っておくと便利です。つまり、すべてを置き換えるのではなく、少なくとも時間をかけてすべてのエントリを見つけて置き換える必要があります。
ジェフセブリング、2011

1
あなたは、検索/シリアライズされたデータを交換するために、このスクリプトを使用することができます。interconnectit.com/products/...
コスタ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.