silverstripe / cwp-recipe-basic

CWP 1.x Basic Recipe metapackage (no longer used in CWP 2.x)
BSD 3-Clause "New" or "Revised" License
0 stars 2 forks source link

Recipe has a Composer dependancy that is not met on Silverstripe Cloud hosting #4

Open brettt89 opened 3 years ago

brettt89 commented 3 years ago

Issue

Recipe currently requires a couple of modules that have a hard dependancy on Composer being installed.

Modules:

These modules require that composer be installed on the web boxes or executable by a user with ability to store cached items. This is currently not supported on Silverstripe Cloud and causes PHP errors to be thrown by the recipe during normal behaviour.

Error

Uncaught Exception RuntimeException: "The HOME or COMPOSER_HOME environment variable must be set for composer to run correctly" at /var/www/mysite/releases/63e07fc364b9f90ab583e83a6f04bb72a26faf20/vendor/composer/composer/src/Composer/Factory.php line 652 {"exception":"[object] (RuntimeException(code: 0): The HOME or COMPOSER_HOME environment variable must be set for composer to run correctly at /var/www/mysite/releases/63e07fc364b9f90ab583e83a6f04bb72a26faf20/vendor/composer/composer/src/Composer/Factory.php:652)"}

How to Replicate

  1. Use CWP Basic Recipe to create website and deploy to Silverstripe Cloud.
  2. Navigate to /dev/tasks URL
  3. PHP Error is presented about HOME and COMPOSER_HOME environment variables not being set.
brynwhyman commented 3 years ago

Also raised on the bringyourownideas module: https://github.com/bringyourownideas/silverstripe-maintenance/issues/142 (that provides some context on the work already done).

We had previously seen the same issue on the CWP in-nation platform. That was resolved with the following (and was expected to resolve it for SC too): https://github.com/bringyourownideas/silverstripe-composer-update-checker/pull/35/files

michalkleiner commented 3 years ago

I guess the culprit might be what is mentioned in the most popular comment on the putenv manual page:

putenv/getenv, $_ENV, and phpinfo(INFO_ENVIRONMENT) are three completely distinct environment stores. doing putenv("x=y") does not affect $_ENV; but also doing $_ENV["x"]="y" likewise does not affect getenv("x"). And neither affect what is returned in phpinfo().