Drupal 8サイトでは、次のようなブロックのエラーが表示されます。
このブロックは壊れているか欠落しています。コンテンツがないか、元のモジュールを有効にする必要がある場合があります。
このエラーを解決するにはどうすればよいですか?
カスタムブロックを作成し、カスタムブロックをリージョンに配置した後、カスタムブロックを失ったか、削除されたか、1つの環境から構成のエクスポートを作成し、他の環境から構成のインポートを作成しました。そのため、カスタムブロックは存在しなくなりましたが、ブロックレイアウトページ(admin/structure/block)に参照が存在します。
そのため、ブロックレイアウトページ(admin/structure/block)から欠落しているブロックを削除し、カスタムブロックを再度作成して、リージョンに再度配置します。
この問題について議論しているコアな問題があります: https://drupal.org/project/drupal/issues/2756331
これは、このモジュールを使用して克服することもできます: https://www.drupal.org/project/recreate_block_content
ブロックの配置は設定として保存されます。これがエクスポートされ、環境間で同期されます。ブロックの実際のコンテンツは、contentと正確に見なされます。つまり、新しい構成を別の環境にインポートする(またはブロックを削除してから構成を再インポートする)と、ブロックの構成と実際のブロックインスタンス(存在しなくなります)の間に不一致が生じます。
この問題を解決するには、欠落しているブロックの構成を削除してから、ブロックを再作成する必要があります。これにより、サイトで不一致を解決できます。
別のオプションは fixed_block_content 提供されたモジュールを使用してこのプロセスを管理することです。
Drupalまさにこのことを論じるコアの問題があります。 https://drupal.org/project/drupal/issues/2756331
ビューに関しても同じ問題がありました。別のテーマを試した後、Viewsブロックの一部が失われました。チェックしたところ、実際のビューが無効になりました。ビューページに移動して、ビューと表示されたすべてのブロックを期待どおりに「有効にする」ことで、復元できました。
私自身、これに遭遇しました。モジュールやパッチを使用してもうまくいきませんでした。データベースの修正ルートを実行し、これがUUIDまたはIDと関係があると考えています。すべてうまくいきます。これを修正するために私のために働いたのは、block_content_field_data
テーブルを作成し、フィールドreusable
の既存のすべてのブロックがNULL
ではないことを確認しました
次に、サイトのキャッシュをクリアすると、不足しているカスタムブロックが表示されます。これまでのところ、この回避策は私にとってうまくいきました。
ああ、私は現時点で8.6.13です。
これは、ブロックが作成されると、一意のID(uuid)が生成されるために発生します。これは、block_contentテーブルから確認できます。
カスタムブロックはノードに似たコンテンツの一部であるため、ある環境(devなど)でブロックを作成し、別の環境(実稼働またはQA)でブロックを手動で再作成する場合。ブロックには別のuuidがあります。
構成の同期は、存在しないUUIDを探します。これを修正するには、データベースからデータをインポートする必要があります。または、次のテーブルで(idおよびuuid)を更新します。
block_content;
block_content_field_data;
block_content__body;
block_content_field_revision;
block_content_revision;
block_content_revision__body;
私の問題は、devにのみ存在するブロックと、他の場所には存在しないブロックを指す構成によって引き起こされました。それはレイアウトビルダーで登場しました。私はDrupal 8.7.6を使用しています。レイアウトビルダーに移動して、不良ブロック参照を削除し、正しいブロックを再度追加するだけで問題は解決しました。問題を再現しないように、構成を再エクスポートしてリポジトリを更新する必要がありました。