Memo

メモ > 技術 > 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を調整すべきか ただしその場合、運用中にテーブル定義を変更する場合はどうするか。「プラグインをいったん削除して再度インストール」は、データの保持を考えれば問題がありそう

Advertisement