LOCK_EX will not work on NFS and many other networked file systems.
Removed LOCK_EX for writing Proxy class file
@beberlei Did you want to merge this?
Is any chance to merge this ?
Working with Symfony2/doctrine on vagrant with nfs is impossible
Huh, LOCK_EX is there with a reason.
The best solution for configurable file locking is by using stream, e.g. "safe://path_to_proxies".
new Doctrine\ORM\Proxy\ProxyFactory($em, $proxyDir = 'safe://path_to_proxies');
LOCK_EX is not really required, since proxy classes should only be generated manually (except in a dev environment).
Dev environment is actually a pretty good reason: sometimes you have multiple concurrent requests being made (e.g. from an Ajax app), and you don't want one to corrupt another.
However, on further thought and some more testing, LOCK_EX is actually not sufficient: while this prevents a corrupt proxy file from being written to disk, it does not guarantee that a correct one will be read: require() does not use advisory locking.
This is a reason why I am experiencing:
PHP Fatal error: Class 'Celtra\\Models\\Proxies\\__CG__\\Celtra\\Models\\Account' not found in .../server/vendor/doctrine/orm/lib/Doctrine/ORM/Proxy/ProxyFactory.php on line 102
I guess a new file would have to be written elsewhere and then atomically moved (rename()'d) into place. However, I'm not sure NFS supports overwriting rename().
Can you confirm?
Overwriting rename seems to work on NFS.
Would it be possible to change:
file_put_contents($fileName, $file, LOCK_EX);
$tmpFileName = $fileName . '.' . uniqid("", true);
Fixed in www.doctrine-project.org/jira/browse/DDC-1735