There has been a lot written about how to speed up Symfony when running it inside a Vagrant box. In my opinion, the most
interesting one is Running the Symfony application
on Vagrant without NFS below 100ms. The change that has the biggest possitive impact on performance consists on
vendors/ directory outside the shared folder.
However, most of the provided solutions involve modifying your
file or even the front controller code to load vendors from a different
directory. You will end with something like this:
And your PHP code will look like this:
But what if we want to deploy the same code on a different environment, such as our production systems? We might want our application directory to be self-contained.
Our approach to improve our development box performance will affect where the dependencies should be installed on production, unless we apply some modifications to our code just after deploying to change the paths.
Making the vendors path configurable without changing your code
This solution lets you keep the
vendors directory outside your application
directory, but defaults to the current directory.
How can this be achieved without touching a single line of code when deploying? Using environment variables!
Just leave the
composer.json untouched, without a
vendor-dir setting, and
use the following code on your front controller:
COMPOSER_VENDOR_DIR environment variable is not set, Composer will look
vendor/ directory inside the application directory.
You will usually set it just on your Vagrant box, preferably using a provisioning system such as Ansible or Puppet.
Setting an environment variable on Apache is as easy as:
If you are using nginx+php-fpm instead, php-fpm has to be configured like this:
Don’t forget to set
COMPOSER_VENDOR_DIR also when using
composer from CLI.
If you want to see a working example, have a look at the following AgenDAV files: