Drupal 9

Drupal 9
インストール

composerでDrupalプロジェクトとして新規インストールする場合

Drupal 9.4.8の場合 composer create-project drupal/recommended-project:9.4.8 "install-dir"

 

PHP

PHP5.6の場合

libapache2-mod-php5.6

PHP 7.4 の場合

libapache2-mod-php7.4 php-common php7.4 php7.4-bcmath php7.4-cli php7.4-common php7.4-curl php7.4-gd php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-xml php7.4-zip

PHP8.1の場合

libapache2-mod-php8.1 php-common php8.1 php8.1-bcmath php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-zip

PHP8.2の場合

libapache2-mod-php8.2 php-common php8.2 php8.2-bcmath php8.2-cli php8.2-common php8.2-curl php8.2-gd php8.2-mbstring php8.2-mysql php8.2-opcache php8.2-readline php8.2-xml php8.2-zip php8.2-dom

php.ini の設定

memory_limit = -1
upload_max_filesize = 64M
post_max_size = 64M
realpath_cache_size = 256k
realpath_cache_ttl = 3600

 

PHP7.4 -> PHP8.1 への切り替え

sudo a2dismod php7.4

sudo a2enmod php8.1 
sudo service apache2 restart

Commandでの切り替えの場合は

sudo update-alternatives --set php /usr/bin/php8.1 
sudo update-alternatives --set phar /usr/bin/phar8.1 
sudo update-alternatives --set phar.phar /usr/bin/phar.phar8.1 
sudo update-alternatives --set phpize /usr/bin/phpize8.1 
sudo update-alternatives --set php-config /usr/bin/php-config8.1

詳細は https://tecadmin.net/switch-between-multiple-php-version-on-debian/

 

PHPのバージョンを入れ替える時には、例えば PHP7.4に切り替えるときは、

# update-alternatives --set php /usr/bin/php7.4

もしくは 以下のコマンドで切り替え環境を選択できます。

sudo update-alternatives --config php

alternative php (/usr/bin/php を提供) には 8 個の選択肢があります。

  選択肢    パス           優先度  状態
------------------------------------------------------------
  0            /usr/bin/php8.1   81        自動モード
  1            /usr/bin/php5.6   56        手動モード
  2            /usr/bin/php7.0   70        手動モード
  3            /usr/bin/php7.1   71        手動モード
  4            /usr/bin/php7.2   72        手動モード
  5            /usr/bin/php7.3   73        手動モード
* 6            /usr/bin/php7.4   74        手動モード
  7            /usr/bin/php8.0   80        手動モード
  8            /usr/bin/php8.1   81        手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください:

 

PHP Opcode キャッシング

Debian buster 10 の場合 sudo apt-get install php-apcu

PHP APCu キャッシング

Debian buster 10 および 11 の場合 sudo apt-get install php-apcu

PHP 8.1の場合 sudo apt install php8.1-apcu

PHP 8.1 の場合 /etc/php/8.1/mods-available/apcu.ini  に以下の設定を追加

 apc.enabled = 1
 apc.shm_size = 96M

Debian 11 の場合は php-apcu インストール後のデフォルト設定では以下の設定になりました。

 apc.enabled On
 apc.shm_size 32M
 apc.ttl 0

Debian buster 12  PHP8.1 の場合 sudo apt-get install php8.1-apcu

   sudo a2enmod proxy_fcgi setenvif
 sudo a2enconf php8.1-fpm

  php-apcu インストール後のデフォルト設定では、/etc/php/8.1/mods-avaiable/acpu.ini では以下の設定になりました。

 extension=apcu.so

 /etc/php/8.1/fpm/conf.d/20-apcu.ini では以下の設定になりました。

 extension=apcu.so

 上記Debian12での php-apcu インストール後の動作環境は以下の設定でした。

 Enabled (32 MB)
 Memory available: 31.23 MB.

 

Composerのインストール

詳細は: https://getcomposer.org/download/

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

sudo mv composer.phar /usr/local/bin/composer

 

ComposerでDrupal9のインストール

Composer template for Drupal projectsを使う場合 詳細は: https://github.com/drupal-composer/drupal-project

composer create-project drupal-composer/drupal-project:9.x-dev some-dir --no-interaction

 

dev版ではない環境のインストール(Drupal 9.4.1の場合) 詳細は: https://www.drupal.org/project/drupal/releases/9.4.1

composer create-project drupal/recommended-project:9.4.1 some-dir

 

アップデイト

Drupal 9.4.xxxの場合 詳細は: https://www.drupal.org/project/drupal/releases/9.4.1

composer update "drupal/core-*" --with-all-dependencies

バージョンを指定してアップデイトする場合(9.4.1を指定した場合)

composer require drupal/core-recommended:9.4.1 drupal/core-composer-scaffold:9.4.1 drupal/core-project-message:9.4.1 --update-with-all-dependencies

その後モジュールやSymponyなどの環境のアップデイト

composer update

 

アップグレード

Drupal 8からDrupal 9へ

システム環境

Drupal 8.9.20からDrupal 9.3.9へのアップグレード

手順概要

PHPをPHP7.4へアップグレード  データベースは MariaDB 10.7.3 へアップグレード

既存DrupalのデータベースとDrupalホームのディレクトリをすべてバックアップします。

デザインテンプレートのアップグレード

Drupal 8.9.20 環境で Upgrade Statusモジュールをインストールして更新できるモジュール環境を確認します。

Upgrade StatusモジュールがComposerの依存関係などでインストールできない場合は、依存関係を無視してインストールします。

sudo composer require --update-with-dependencies --prefer-dist 'drupal/upgrade_status:^3.14'

最初に、更新できないモジュールは、アンインストールして drush updatedb を行います。

更新できるモジュールでも、Drupal 8とDrupal9対応、Drupal 9.0対応のみ、などさまざまな制約があるので確認します。その制約に応じたアップグレードの段階的な更新作業が必要です。

今回は、Drupal 8.9.20 上でDrupal 8とDrupal9対応のモジュールは、composer update コマンドで更新できました。Drupal 9.0から対応のモジュールのバージョンがあるので、一度、Drupal 9.0までアップグレードして、それからDrupal 9.3.9へアップグレードする手順で行いました。ただし、この手順ではDrupal 9.3.9へのアップグレードはできなかったので、後述の(B)Drupal9.3.9を指定してアップグレードを行いました。

Drupal 9へのComposerベースでのアップグレード作業の手順概要(英語)を参照します。

パーミッションの変更

  • sudo chmod 777 ./web/sites/default/
  • sudo chmod 666 ./web/sites/default/*settings.php
  • sudo chmod 666 ./web/sites/default/*services.yml

今回のDrupal8は drupal/core-dev でComposerインストールしているので、その手順で、Drupalコアを Drupal 9.0.14 へアップロードします。

sudo composer require 'drupal/core-dev:^9' --dev --update-with-dependencies --no-update

Updating drupal/core-dev (8.9.20 => 9.0.14)

上記コマンドで、もし、9.0.14にアップグレードしない場合は、 sudo composer update を実行します。

データベースの更新 sudo drush updatedb

今回は drupal/menu_per_role:^1.4 と drupal/metatag:^1.19 がDrupal 9.0専用モジュールのバージョンが必要なので、アップデイトインストールします。

sudo composer require 'drupal/menu_per_role:^1.4'
sudo composer require 'drupal/metatag:^1.19'

Updating drupal/core-dev (8.9.20 => 9.0.14)
Updating phpstan/phpstan (1.5.2 => 1.5.3):

データベースの更新 sudo drush updatedb

(B) Drupal 9.0.0 から最新のDrupal 9.3.9 のバージョンを指定してアップデイトします。

sudo composer require "drupal/core:9.3.9" --no-update && sudo composer update

Updating drupal/core-dev (9.0.14 => 9.3.9)

データベースの更新 sudo drush updatedb

これで、Drupal 8.9.20からDrupal9.3.9へアップグレードできました。

以下のコマンドでパーミッションを戻します。

  • sudo chmod 755 web/sites/default
  • sudo chmod 644 web/sites/default/*settings.php
  • sudo chmod 644 web/sites/default/*services.yml

 

※もし、これでもDrupal9.3.9へのアップグレードができない場合は、空のDrupal9.3.9のソースを用意して、追加モジュールをComposerでインストールし、Sitesディレクトリ、テーマ、Profileディレクトリなどを移行前のDrupal8のデータと同じ状態にします。既存のデータベースをインポートして、新規Drupa9.3.9インストール手順で移行を行います。

 

drupal-scaffoldの問題

Drupal 8 の初期の環境、Composer Devパッケージではない場合は、drupal-scaffold がComposerベースのバージョンではありません。drupal/core-compoeser-scaffold 版に変更が必要です。drupal/core-compoeser-scaffold 版ではComposer 2も使えると思います。

まず、sudo composer require --dev drupal/core-dev:8.9.20 でDrupal 8.9.20へアップデイトします。

この時点で、symfony/css-selectorがバージョン4になってしまう場合は、バージョン3にダウングレードします。

sudo composer require --update-with-dependencies --prefer-dist symfony/css-selector:3.4.9

もし、ほかのモジュールもダウングレードが必要ならば 繰り返します。

その後、sudo composer require  drupal/upgrade_status で upgrade_status モジュールをインストールします。この環境でないと upgrade_statusモジュールはインストールできません。

sudo composer require --dev drupal/core-dev:8.9.20 --update-with-dependencies --prefer-dist symfony/css-selector:3.4.9

sudo composer require --dev drupal/core-dev:8.9.20 --update-with-dependencies --prefer-dist symfony/debug:3.4.9

sudo composer require --update-with-dependencies --prefer-dist symfony/css-selector:3.4.9

 

また、もし、composer update実行時に以下のようなエラーが起きた場合は、drupal-composer/drupal-scaffoldを削除します。

  Problem 1
    - drupal-composer/drupal-scaffold[2.5.0, ..., 2.6.1] require composer-plugin-api ^1.0.0 -> found 
composer-plugin-api[2.3.0] but it does not match the constraint.
    - Root composer.json requires drupal-composer/drupal-scaffold ^2.5 -> satisfiable by 
drupal-composer/drupal-scaffold[2.5.0, ..., 2.6.1].

sudo composer remove drupal-composer/drupal-scaffold

なぜなら、drupal-scaffoldは使わないようになりました。代わりに drupal/core-composer-scaffold を使います。(2022年6月18日)

 

webfloの問題

また、もしcomposer update などでwebflo関連の依存関係やエラーが起きた場合は、composer remove webflo/drupal-core-require-dev  や composer remove webflo/drupal-finder などで削除します。

"webflo/drupal-finder": "^1.0.0",
        "webmozart/path-util": "^2.3",
        "zaporylie/composer-drupal-optimizations": "^1.0"
    },
    "require-dev": {
        "webflo/drupal-core-require-dev": "^8.6.0"

 

Drupal 8のデータベースからDrupal 9へアップグレード

環境 

 Drupal 8.9.20(PHP7.4環境)から Drupal 9.5.8 (PHP8.1環境) へのアップグレード OSはDebian10

   Drupal8でのモジュールは アクティブのモジュールは、コア 41モジュール、追加モジュール 98モジュール

手順概要

PHPをPHP7.4からPHP8.1へアップグレード データベースはPHP7.4での環境で使っていたのと同じです。

Drupalディレクトリをバックアップ用にします。新しいDrupal 9.5.8をインストールするディレクトリと入れ替えます。同じデータベースを使って、Drupal8とDrupal9を入れ替えます。

Drupal 9.5.8 のダウンロード sudo composer create-project drupal/recommended-project:9.5.8 ./

移行元の web/sites/default/files をDrupal9へコピー 

移行元のモジュール、デザインテンプレートなどのモジュールのDrupal9版をcomposerでDrupal 9.5.8へインストールします。もし、Drupal9版がない場合はインストールしません。

composerでdrushコマンドも追加インストールします。 sudo composer require drush/drush

Drupal9ディレクトリのパーミッションを調整して、新規Drupal9インストール手順を実行します。インストール中に、データベース設定となりますので、そこで、移行元のデータベースの設定にして、続けると、既にインストール済みなので、「アップデイトしますか」、「既存のサイトを見ますか」の選択になり、「既存のサイトを見ますか」を選択クリック

その後、sudo drush updatedb を実行します。必要であれば update.php もsetteings.phpで権限設定変更して、実行します。その後、sudo drush cr を繰り返し、データベース定義のアップグレードが完了するまで繰り返します。追加モジュールなどのデータ構造により、できない場合もあり得ると思いますが。エラーの内容を確認します。

この作業でDrupal9.5.8へアップグレードしたDrupalサイトは https://kawasaki-bf.jp

※もし、サイトがメンテナンスモードになっている場合は sudo drush state:set system.maintenance_mode 0  でOFFになります。 参考:https://www.drupal.org/docs/user_guide/en/extend-maintenance.html

※もし、site...../upddate.phpを実行して、Drupal9対応モジュールがないDrupal8モジュールでモジュールがないのでupdate.phpスクリプトが実行できない場合は、そのモジュールをDrupal9サイトへコピーしてのxxxxx.info.yml ファイルを編集して、「core_version_requirement: ^9.2 || ^10」を追加して、強制的にDrupal9対応の設定モードにして、updata.phpを実行させます。

 

デザインテーマ

Drupal 9向けデザインテーマテンプレート(https://www.morethanthemes.com)の使い方

 

多言語化

Drupal8の多言語化と同じになります。詳細は ここから

 

拡張モジュール

Drupal 9 および Drupal 10 での拡張モジュール 詳細は ここから

 

タグ: 

オープンソースソフトウェア: 

CMS: 

FAQ

Drupal 9・10 のFAQ

Drupal 9・10でのさまざま設定や機能に関する情報です。

ユーザー管理

Q. ログインしたユーザーがユーザーパスワードを変更できないようにしたい!

A. 拡張モジュールもいくつかあるようですが、シンプルに、ユーザープロファイルのフォーム画面制御で「ユーザー名とパスワード」(/admin/config/people/accounts/form-display)を非表示にすることで、パスワード変更ができない状態になります。ただし、管理者も含めてすべてのユーザーが同じ設定なりますので、パスワード変更では、一時的に非表示から表示に変更が必要になります。

 

 

 

Theme

デザインテーマ(morethanthemes)
Morethanthemes

Morethanthemesの概要: https://www.morethanthemes.com

FAQ

Flashy+ News

英語がオリジナルなので、日本語を追加後、トップページが表示されないのは、トップページを日本語へ翻訳していないからです。その場合は、トップページのコンテンツ /news-default  もしくはそのノード番号 /node/70 のページを日本語の翻訳を有効にします。

 

データ構造付きデータベースをインポートする場合は英語をメインに

Morethanthemesのデータ構造付きデータベースをインポートする場合は英語をメインにします。Morethanthemesのデータは初期作成時に英語をデフォルト設定で作成されていますので。その後、日本語を追加、英語と日本語をともに翻訳可能にします。言語のデフォルト設定は英語で設定し、コンテンツタイプごとにメインの言語を設定し、日本語がページ作成でデフォルト設定になるように設定します。

初期設定後は、日本語をデフォルト設定にしたコンテンツタイプなどは、日本語環境で運用し、サイト全体や英語がメインのデフォルト設定の作業設定は英語の環境で行うほうが問題が少ないと思います。

ただし、Default Langageが英語の場合、コンテンツタイプで日本語をデフォルト設定にした場合、日本でコンテンツを作成すると、英語に翻訳しないとコンテンツのページが見つからない状態になります。そのコンテンツを英語に翻訳すると日本語と英語で表示されます。この状態は、常にDefault Languageの英語が必要で、日本語と英語をペアでコンテンツ作成する必要があります。

英語版で構築されたデザインテンプレートでデータベース込みで新規インストールの場合は、「Default langauge」は英語のままで、日本語を追加して、英語と日本語の多言語環境として運用し、コンテンツを作成する場合、英語と日本語をともに作成します。ただし、日本語だけ(英語は今は使わない状態)で運用したい場合は、日本語だけで運用するコンテンツタイプをの「Default langauge」「-Not specified-」に設定します。後で、日本語に設定して英語を追加すれば多言語になります。

また、英語が「Default langauge」の場合は、サイトのさまざま環境設定は、英語環境で設定するほうが、多言語の設定が理解しやすいと思います。検証が複雑になる場合があると思いますので。

※Drupal 8/9でのDefault Languageは変更すると問題が発生します。以下のページを参考に

https://www.drupal.org/docs/multilingual-guide/install-a-language

※ Content type -> Language settings -> Default language

  • Site's default language  サイトのデフォルト言語
  • Interface text language selected for pag  ページ用に選択されたインターフェースのテキスト言語
  • Author's preferred language  著者の優先言語
  • English
  • Japanese
  • Not specified(未指定)  指定されていない
  • Not applicable(適用不可)  適用できない

Not specified  指定されていない」で指定すれば、英語がDefault Languageで、コンテンツタイプを「Not specified」で設定すれな、日本語環境でそのコンテンツタイプのコンテンツを新規作成した場合、日本語で表示されます。

先にEnglishなどで言語指定したコンテンツは、あとからNot specifiedに変更することはできません。また、Not specifiedで作成した場合、あとから、日本語や英語に変更は可能です。その場合、多言語サイトの設定に準じるので、設定されている多言語のそれぞれの言語のページがないと表示エラー(Page not found)

 

コンテンツタイプの多言語機能検証(Drupal 9.4.8にて)

以下の動作検証は、コンテンツタイプ -> Language settings -> Default language -> "Show language selector on create and edit pages" および "Enable translation" を有効にしない状態で検証しました。 この2つの機能を有効すると、すべての状態で翻訳が有効になります。

  • Not specified(未指定)  指定されていない で新規作成したコンテンツタイプでの挙動

新規コンテンツ作成(Not specified)で作成 -> 日本語でコンテンツを作成 -> 翻訳できない日本語のコンテンツ

新規コンテンツ作成(Not specified)で作成 -> コンテンツタイプを日本語に変更 -> 日本語でコンテンツタイプ作成(翻訳できない)常に(Not specified)の日本語のコンテンツ

新規コンテンツ作成(Not specified)で作成 -> コンテンツタイプをサイトデフォルト言語に変更 -> 日本語でコンテンツタイプ作成(翻訳できない)常に(Not specified)の日本語のコンテンツ

つまり、コンテンツタイプを新規に作成するときに、Not specified で作成した場合は、変更しても、常に、Not specified になります。多言語設定をするときには、Not specified もしくは Not accpkucable 以外の翻訳できる言語設定します。その後、そのコンテンツタイプをNot specified をデフォルト設定にすれば、例えば、英語がデフォルトでも日本語だけのコンテンツを作成し、将来、日本語・英語にすることが可能になります。

  • Not applicable(適用不可)  適用できない で新規作成したコンテンツタイプでの挙動

新規コンテンツ作成(Not applicable)で作成 -> 日本語でコンテンツを作成 -> 翻訳できない日本語のコンテンツ

新規コンテンツ作成(Not applicable)で作成 -> コンテンツタイプを日本語に変更 -> 日本語でコンテンツタイプ作成(翻訳できない)常に日本語のコンテンツ

 

Sublime+

Q: デフォルトのスライドショーの写真を変更したい

 A: デフォルトのスライドシューの写真などを変更しても変化がないので、Layputの編集で、追加のスライドショーを追加して、編集します。その後、デフォルトのスライドショーをLayoutの編集で削除します。スライドショーのブロックは、ブロックタイプで定義しているので、そのブロックを修正します。

 

 

タグ: 

CMS: 

トラブル(Drupal9/10)

各種トラブル(Drupal9/10)
アップデートなどでトラブル

composerで更新後、drushコマンド実行でエラー

In Connection.php line 189:
SQLSTATE[HY000] [2002] Connection refused

データベースの接続が失敗していようなので、sudo systemctl stop mysql   ,  sudo systemctl restart mysql  で接続が出来ました。

 

タグ: 

CMS: 

拡張モジュール(Drupal9/10)

拡張モジュール(Drupal9/10)

 

Workbench Email

モジュールの概要: https://www.drupal.org/project/workbench_email

 

Multiple Registration

モジュールの概要: https://www.drupal.org/project/multiple_registration

FAQ:

Q:ユーザー登録時に自動配信されるワンタイムリンクのメッセージメールの配信ができない。

メッセージメールの配信は、 /admin/config/people/accounts アカウント設定の「通知メールアドレス」に設定したメールアドレスから自動配信されます。SMTP設定で、そのメールアドレスから配信できるか、確認が必要です。

 

 

 

タグ: 

オープンソースソフトウェア: 

CMS: