php
php copied to clipboard
Buildpack support for Drupal 8
I'm attempting to build Drupal 8 using PHP buildpacks. Here's a breakdown of the steps I'm doing.
-
Scaffold Drupal 8.
composer create-project "drupal/recommended-project:^8" drupal
-
Add the following
buildpack.yml
.
---
php:
version: 7.4.*
webserver: nginx
webdirectory: web
- Build the container image.
pack build -b gcr.io/paketo-buildpacks/php drupal-8 --builder paketobuildpacks/builder:full
- Run the new image.
docker run --interactive --tty --env PORT=8080 --publish 8080:8080 drupal-8
The trouble is, the build process creates a symlink of the vendor directory, and running composer install
post that updates the autoload.php
thus:
<?php
/**
* @file
* Includes the autoloader created by Composer.
*
* This file was generated by drupal-scaffold.
*.
* @see composer.json
* @see index.php
* @see core/install.php
* @see core/rebuild.php
* @see core/modules/statistics/statistics.php
*/
return require __DIR__ . '//layers/paketo-buildpacks_php-composer/php-composer-packages/vendor/autoload.php';
Which breaks the autoload sequence.
When I edit it back to what it was,
<?php
/**
* @file
* Includes the autoloader created by Composer.
*
* This file was generated by drupal-scaffold.
*.
* @see composer.json
* @see index.php
* @see core/install.php
* @see core/rebuild.php
* @see core/modules/statistics/statistics.php
*/
return require __DIR__ . '/../vendor/autoload.php';
It works fine. I am not sure why we create symlinks and then run composer install
again.
Copying the vendor
directory instead of symlinking it would help, although there might be some rationale behind symlinking it which I'm not aware of.
Running composer install
after symlinking updates the autoload.php
files to reflect the new location of vendor directory.
Happy to triage any approaches/fixes and contribute back to the buildpack, and thanks for the awesome work.
@paketo-buildpacks/php-maintainers This has been open for a bit. Any update on this? Does the workaround described in the replies to #366 also apply to this use case?