WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

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

@kiy0taka

Description

@kiy0taka

概要(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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions