-
Notifications
You must be signed in to change notification settings - Fork 698
Open
Labels
improvement機能改善機能改善
Milestone
Description
概要(Overview)
app/proxyディレクトリを別のディレクトリのシンボリックリンクにしていると、プラグイン有効/無効時のProxyファイル生成時に以下のようなエラーが発生する
[Eccube\Log\Logger:log:68] - システムエラーが発生しました。 ["Compile Error: Cannot declare class Eccube\\Entity\\Product, because the name is already in use","/mnt/ec-cube/app/proxy/entity/mnt/ec-cube/src/Eccube/Entity/Product.php",1054,"#0 {main}"]
通常の利用ではシンボリックリンクにすることは無いが、クラスタリングするためにapp/proxyディレクトリをファイルサーバーにおいてそれぞれのサーバーにマウントするようなケースでは、シンボリックリンクにすることもある。
#4117 により app/proxy 以下はディレクトリを分けるよう修正された。
この修正により、Proxy再生成時に以下のような src から始まるディレクトリとリンク先のディレクトリ以下に同じ完全修飾クラス名のクラスが作成され衝突する。
app/proxy/entity/mnt/ec-cube/src/Eccube/Entity/Product.php
app/proxy/entity/src/Eccube/Entity/Product.php
期待する内容(Expect) or 要望 (Requirement)
案1. app/proxy/entity 以下をnamespaceのディレクトリだけにする
現状は app/proxy/entity 以下に src や mnt/ec-cube などのディレクトリが含まれてしまうが、app/proxy/entity/Eccube/Entity/Product.php の様にnamespaceのディレクトリだけにしてしまえば、衝突することはなくなる。
この方法ができればいいが、AnnotationDriver でクラスをロードする前に本体のEntityかProxyかを決定しないといけないため、クラスをロードせずにnamespaceを判定しなければいけなくなるので難しい。
案2. Proxy出力場所を環境変数等で変更できるようにする
現状は app/proxy/entity 固定になっているが、これを環境変数で変更できるようにする
再現手順(Procedure)
- ドキュメントルートを
/var/www/ec-cubeとする。 - 以下のように
/var/www/ec-cube/app/proxyを/mnt/ec-cube/app/proxyのシンボリックリンクとしておく。$ ln -s /mnt/ec-cube/app/proxy /var/www/ec-cube/app/proxy - Entity拡張を利用しているプラグインをインストールする
- プラグインを有効化する
- プラグインを無効化する
- エラーが発生する
環境 (environment)
- EC-CUBE: 4.0.3
関連情報 (Ref)
Metadata
Metadata
Assignees
Labels
improvement機能改善機能改善