Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

app/proxyディレクトリをシンボリックリンクにしているとProxyファイル生成時にシステムエラーが発生する #4252

Open
kiy0taka opened this issue Jul 30, 2019 · 1 comment

Comments

@kiy0taka
Copy link
Contributor

commented Jul 30, 2019

概要(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 以下に srcmnt/ec-cube などのディレクトリが含まれてしまうが、app/proxy/entity/Eccube/Entity/Product.php の様にnamespaceのディレクトリだけにしてしまえば、衝突することはなくなる。

この方法ができればいいが、AnnotationDriver でクラスをロードする前に本体のEntityかProxyかを決定しないといけないため、クラスをロードせずにnamespaceを判定しなければいけなくなるので難しい。

案2. Proxy出力場所を環境変数等で変更できるようにする

現状は app/proxy/entity 固定になっているが、これを環境変数で変更できるようにする

再現手順(Procedure)

  1. ドキュメントルートを /var/www/ec-cube とする。
  2. 以下のように /var/www/ec-cube/app/proxy/mnt/ec-cube/app/proxy のシンボリックリンクとしておく。
    $ ln -s /mnt/ec-cube/app/proxy /var/www/ec-cube/app/proxy
    
  3. Entity拡張を利用しているプラグインをインストールする
  4. プラグインを有効化する
  5. プラグインを無効化する
  6. エラーが発生する

環境 (environment)

  • EC-CUBE: 4.0.3

関連情報 (Ref)

#4117

@nanasess

This comment has been minimized.

Copy link
Contributor

commented Aug 1, 2019

案2で逃げられるのであれば、その方がよさそうですね

@kazumiiiiiiiiiii kazumiiiiiiiiiii added this to the 4.0.x milestone Aug 2, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
3 participants
You can’t perform that action at this time.