メモ > 技術 > CMS: ECCube > プラグインの導入: プラグインを導入済みのECCubeをセットアップする場合
プラグインの導入: プラグインを導入済みのECCubeをセットアップする場合
■概要
composer.json には、追加プラグインの情報が含まれている(プラグインをインストールすると、composer.json と composer.lock が更新される)
そのため何らかのプラグインを追加した後は、通常の composer install では新規にインストールできなくなる
具体的には、以下のようなエラーになる
[RuntimeException]
You can not install the EC-CUBE plugin via `composer` command.
Please use the `bin/console eccube:composer:require ec-cube/veritrans4g` instead.
bin/console で上記指定のコマンドを実行すれば良さそうだが、
初期状態はそもそも vendor が無いので以下のエラーになる
PHP Warning: require(/var/www/html/bin/../vendor/autoload.php): failed to open stream: No such file or directory in /var/www/html/bin/console on line 13
Warning: require(/var/www/html/bin/../vendor/autoload.php): failed to open stream: No such file or directory in /var/www/html/bin/console on line 13
PHP Fatal error: require(): Failed opening required '/var/www/html/bin/../vendor/autoload.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/bin/console on line 13
Fatal error: require(): Failed opening required '/var/www/html/bin/../vendor/autoload.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/bin/console on line 13
以下、ついに公式に対応される可能性が出たか
プラグインの初期インストール機構 - Issue #4733 - EC-CUBE/ec-cube
https://github.com/EC-CUBE/ec-cube/issues/4733
■対応手順
[PHP] composerでocramius/package-versionsのインストールに失敗する - 端くれプログラマの備忘録
https://www.84kure.com/blog/2020/02/23/php-composer%E3%81%A7ocramius-package-versions%E3%81%AE%E3%82...
「--no-plugins --no-scripts」を付けてComposerでのインストールを行う
これにより、上記プラグイン関連のエラーを回避できる
作業ディレクトリに移動する
$ sudo su -s /bin/bash - apache
$ cd /var/www/html
「--no-plugins --no-scripts」を付けてComposerをインストール
$ composer install --no-plugins --no-scripts
Deprecation warning: require.ec-cube/VeriTrans4G is invalid, it should not contain uppercase characters. Please use ec-cube/veritrans4g instead. Make sure you fix this as Composer 2.0 will error.
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 165 installs, 0 updates, 0 removals
- Installing ocramius/package-versions (1.4.2): Loading from cache
- Installing ec-cube/plugin-installer (0.0.8): Loading from cache
- Installing kylekatarnls/update-helper (1.2.0): Loading from cache
- Installing symfony/flex (v1.8.4): Loading from cache
- Installing symfony/process (v3.4.42): Loading from cache
- Installing symfony/finder (v3.4.42): Loading from cache
- Installing symfony/polyfill-ctype (v1.17.1): Loading from cache
- Installing symfony/filesystem (v3.4.42): Loading from cache
- Installing symfony/polyfill-mbstring (v1.17.1): Loading from cache
- Installing psr/log (1.1.2): Loading from cache
〜略〜
codeception/codeception suggests installing league/factory-muffin-faker (For Faker support in DataFactory module)
codeception/codeception suggests installing phpseclib/phpseclib (for SFTP option in FTP Module)
codeception/codeception suggests installing stecman/symfony-console-completion (For BASH autocompletion)
Package zendframework/zend-eventmanager is abandoned, you should avoid using it. Use laminas/laminas-eventmanager instead.
Package zendframework/zend-code is abandoned, you should avoid using it. Use laminas/laminas-code instead.
Package sensio/generator-bundle is abandoned, you should avoid using it. Use symfony/maker-bundle instead.
Package setasign/fpdi-tcpdf is abandoned, you should avoid using it. No replacement was suggested.
Package facebook/webdriver is abandoned, you should avoid using it. Use php-webdriver/webdriver instead.
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Package easycorp/easy-log-handler is abandoned, you should avoid using it. No replacement was suggested.
Generating optimized autoload files
完了すると、プラグイン無しの状態でインストールされている
この状態で引き続き「php bin/console eccube:composer:install」を実行しても、データベースに接続できないのでエラーになる(データベースへの接続情報を登録していないため)
いったんECCube自体のセットアップを行う。ブラウザから以下にアクセスしてインストールする(後述の「ECCubeをインストール」と同じ手順でインストールできる)
http://eccube4.local/
インストールできたらマイグレーションを実行する
$ php bin/console doctrine:migrations:migrate
続いて、管理画面から認証キーを設定する
以前の環境で設定された認証キーは、composer.json の最後の方にある「X-ECCUBE-KEY」という箇所に記録されている。よってこの値を設定する
改めて認証キーが composer.json に書き込まれるが、同じ認証キーを設定しているのでファイルの差分が発生しないことを確認する
以下のコマンドでプラグインをダウンロードする。これで管理画面からもプラグインを確認できる
$ php bin/console eccube:composer:install
最後に、以下でオートローダーを生成する
$ composer install
あとは、必要に応じて管理画面からプラグインを有効化&設定する
■試行錯誤メモ1
※上記の「対応手順」なら、以下のようにややこしいことはしなくていいかも
以下を参考に、この現象を回避しようとしたもの
EC-CUBE4 初回デプロイ - Qiita
https://qiita.com/applexco/items/00831ba61936139e8b26
準備として、ECCubeデフォルトの composer.json と composer.lock を、それぞれ以下の名前で配置しておく(コミットもしておいて良さそう)
composer-default.json
composer-default.lock
以降はインストール時の手順
まずは作業ディレクトリに移動する
$ sudo su -s /bin/bash - apache
$ cd /var/www/html
以下を実行する代わりに
$ composer install
以下を実行する
この時点では、独自に追加したライブラリやプラグインを含まない、ECCubeデフォルトのライブラリがインストールされる
(composer-default.json をもとにインストールされる)
$ COMPOSER=composer-default.json composer install --no-scripts
実行できたら、ブラウザからアクセスしてインストールする(後述の「ECCubeをインストール」と同じ手順でインストールできる)
インストールできたら、マイグレーションを実行する
$ sudo su -s /bin/bash - apache
$ cd /var/www/html
$ php bin/console doctrine:migrations:migrate
管理画面から認証キーを設定する
以下のコマンドでプラグインをダウンロードする。これで管理画面からもプラグインを確認できる
$ php bin/console eccube:composer:install
最後に、以下でオートローダーを生成する
$ composer install
あとは、必要に応じて管理画面からプラグインを有効化&設定する
■試行錯誤メモ2
※上記の「対応手順」なら、独自プラグインのためにインストールしたパッケージにも対応できるかも
公式プラグインは上記で対応できそうだが、独自プラグインの場合はさらに問題があるみたい
独自プラグインのためにComposerで依存パッケージをインストールすると、依存解決ができなくなるらしい
現状問題は放置されている。ECCubeはComposerと相性が悪いみたい
EC-CUBE4 独自プラグイン開発 ?独自プラグイン開発Tips - Qiita
https://qiita.com/haruna-nagayoshi/items/27108c75eaf9511f3524
なかなかややこしいことになるようなので、どうしても対応するなら
・プラグインとvendorの内容を丸ごとGit管理対象にする
・データベースは「プラグイン導入済みの状態のdump」を作成し、初期データベースとする
くらいか
ただし強引さは否めない
■要調査メモ
プラグインが作成するデータベースのテーブルに手を加える場合、どこで指定すべきか
通常のマイグレーションに含めると、初回はプラグインが存在しない問題がある
対象プラグインをGit管理に含めて、プラグインのインストール時に実行されるSQLを調整すべきか
ただしその場合、運用中にテーブル定義を変更する場合はどうするか。「プラグインをいったん削除して再度インストール」は、データの保持を考えれば問題がありそう