web-dev-qa-db-ja.com

Drupal 8)で、共有データベースを使用してマルチサイトとデータテーブルを共有できますか、それとも「ドメイン」contribモジュールを使用する必要がありますか?

Drupal 8(8.6.13))で動作しているマルチサイト設定があります-すべてのサイトがコードベースとデータベースを喜んで共有していますが、共有しているようには見えませんdataプレフィックス配列方式を使用したサイト間のテーブル-これはDrupalで変更されました= 8より古いバージョンから?

...ほとんどのデータはDrupal 7またはそれ以前)のためのものであり、与えられた解決策は有効に見えますが、実装しようとしても完全には機能しません。

たとえば、ベース(デフォルト)サイトで分類法、コンテンツタイプ、およびREST APIなどの管理機能を処理します。各サイトは独自のコンテンツとテーマを処理できます(ユーザーがいません)心配)とsites/multi-site-1/settings.phpはこれを適切に処理するように構成されています(私はそう思います)。

ベースsettings.php

$databases['default']['default'] = array(
  'database' => 'base_database',
  'username' => 'db_user',
  'password' => 'db_password',
  'prefix' => array(
    'default'             => 'base_',
// ** content type and fields seem to share okay!
    'content_type_' => 'shared_',
    'content_field_' => 'shared_',

// ** the other tables with 'shared_' prefix that do not work shown below

sites/multi-site-1/settings.php

$databases['default']['default'] = array (
  'database' => 'base_database',
  'username' => 'db_user',
  'password' => 'db_password',
  'prefix' => array(
    'default'         => 'site_1_',

// ** can these even be shared?
    // 'config'              => 'shared_',
    // 'config_snapshot'     => 'shared_',

// ** users related things have errors when installing multi-site-1
    //'authmap' => 'shared_',
    //'profile_fields' => 'shared_',
    //'profile_values' => 'shared_',
    //'permission' => 'shared_',
    //'role' => 'shared_',
    //'sessions' => 'shared_',    //1. error - if sharing site won't even start install
    //'user' => 'shared_',        //3. error - "EntityStorageException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY': "
    //'users' => 'shared_',
    //'users_roles' => 'shared_', //2. error - "The "user_role" entity type does not exist." 
    //'users_data' => 'shared_',  //2. error - "Table users_data already exists"
    //'users_field_data' => 'shared_',

// ** taxonomy related share seems okay but not working?
    //'taxonomy_index' => 'shared_',
    //'taxonomy_term_data' => 'shared_',
    //'taxonomy_term_field_data' => 'shared_',
    //'taxonomy_term__parent' => 'shared_', 
    //'vocabulary' => 'shared_',       // 1. install error - not present in D8 db?
    //'vocabulary_node_types' => 'shared_', 
    //'term_data' => 'shared_', // not present in D8?
    //'term_hierarchy' => 'shared_', // not present in D8?
    //'term_image' => 'shared_', // not present - n/a?
    //'term_lineage' => 'shared_', // not present - n/a?
    //'term_node' => 'shared_', // not present - n/a?
    //'term_relation' => 'shared_', // not present - n/a?
    //'term_synonym' => 'shared_', // not present - n/a?
  ),
  'Host' => 'localhost',
  'port' => '3306',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql',
  'collation' => 'utf8mb4_unicode_ci',
);
  1. この方法でマルチサイト構成を放棄し、 Domain Access のようなcontribモジュールに依存する必要がありますか? (私はこれをセットアップしようとしましたが、適切に構成されているようには見えません-またはそれが私のために何をしているのかわからない)。
  2. これは、データベースのデータをDrupal 8で共有するための良い方法ですか、それとも何か不足していますか?
  3. 古いv7とv6のマルチサイトロジックを追加しすぎていますか?Drupal 8はこれを別の方法で処理しますか?

これをより良くする方法についての洞察は大歓迎です!


いくつかの回答はすでに読んで参照しています:

1
rwcorbett

簡単な説明付きで自分の答えを投稿しています...

私は Config Split および Features モジュールを調査しましたが、Drupalのセットを実行するこのインスタンスに必要なものが提供されていないことがわかりましたサイトの。

サイト間で共有する必要がある共有データやその他の相互運用性は、期待どおりに処理されません...したがって、私の解決策は、Drupalインスタンスがユーザーを適切なWebサーバーでのリダイレクトを介したサイトのコンテンツ、およびパスとコンテキストフィルターの適切な使用。

Drupal 8に関して同様の質問に答えようとしている他の人がここにいる場合は、これらを考慮してください:

    ## multi-site-1 ==> _workspace/base-site/web/sites/multi-site-1
       <VirtualHost *:80>
          DocumentRoot "/var/www/base-site.com/web"
          ServerName multi-site-1.com
          ServerAlias www.multi-site-1.com

          <Directory />
            Options FollowSymLinks
            AllowOverride None
          </Directory>

          <Directory "/var/www/base-site.com/web">
              Options FollowSymLinks Multiviews Indexes
              AllowOverride All
              Order allow,deny
              Allow from all
              Require all granted
              MultiviewsMatch Any
          </Directory>

          ErrorLog "/private/var/log/Apache2/multi-site-1.com-error_log"
          CustomLog "/private/var/log/Apache2/multi-site-1.com-access_log" common
      </VirtualHost>

そして、おそらく.htaccessのようなもの:

RewriteCond %{HTTP_Host} ^(?:www\.)?multi-site-1\.com(.*)$ [NC] 
RewriteRule ^(.*)$ https://www.base-site.com/multi-site-1/$1 [L]

@ leymannx に感謝します。

1
rwcorbett