Skip to content
This repository has been archived by the owner on Oct 19, 2023. It is now read-only.

Laravel 8 - build failed in google app engine flexible environment #534

Open
bhaidar opened this issue Jun 9, 2021 · 2 comments
Open

Laravel 8 - build failed in google app engine flexible environment #534

bhaidar opened this issue Jun 9, 2021 · 2 comments

Comments

@bhaidar
Copy link

bhaidar commented Jun 9, 2021

Hello,
I have a Laravel PHP app with the following:

  • app.yaml
runtime: php
env: flex

runtime_config:
document_root: public
whitelist_functions: proc_open
automatic_scaling:
min_num_instances: 1
max_num_instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
env_variables:
# See substitution variables for Google Cloud Build Trigger
  • cloud_build.yaml
steps:
  - name: node:14.0.0
    entrypoint: npm
    args: ['install']
  - name: node:14.0.0
    entrypoint: npm
    args: ['run', 'prod']
  - name: 'gcr.io/cloud-builders/gcloud'
    args: ['app', 'deploy', '--project', '$PROJECT_ID', '-q', '$_GAE_PROMOTE', '-v', '$_GAE_VERSION']
timeout: '3600s'
  • composer.json
"require": {
"php": "^7.3|^8.0",
...
}

When the Cloud Build Trigger runs, I get the following error:

Step #0: Digest: sha256:1f43a583e4c10b1758647be47b9fb5f9659227ef266978694acbb7981e4ee093
Step #0: Status: Downloaded newer image for gcr.io/gcp-runtimes/php/gen-dockerfile@sha256:1f43a583e4c10b1758647be47b9fb5f9659227ef266978694acbb7981e4ee093
Step #0: gcr.io/gcp-runtimes/php/gen-dockerfile@sha256:1f43a583e4c10b1758647be47b9fb5f9659227ef266978694acbb7981e4ee093
Step #0: + php /builder/create_dockerfile.php create --php73-image gcr.io/google-appengine/php73@sha256:bee53597a0df4167547fd9c2a501484e8c5d03831298f50c1db0e9cdcd915a88 --php72-image gcr.io/google-appengine/php72@sha256:c3f3636b89aab3a83ab288a0108f767a4d56002c9a214b17b5fe93b9ba5f8bbf --php71-image gcr.io/google-appengine/php71@sha256:9d39f66c4e0b7c9a9590ed27373b8c18e79a6cde3dbf48c284ffc5f3fd99d12a
Step #0: [09-Jun-2021 19:06:00 UTC] PHP Warning: array_key_exists() expects parameter 2 to be array, null given in /builder/src/Builder/GenFilesCommand.php on line 232
Step #0:
Step #0: Warning: array_key_exists() expects parameter 2 to be array, null given in /builder/src/Builder/GenFilesCommand.php on line 232
Step #0: [09-Jun-2021 19:06:00 UTC] PHP Warning: array_key_exists() expects parameter 2 to be array, null given in /builder/src/Builder/GenFilesCommand.php on line 232
Step #0:
Step #0: Warning: array_key_exists() expects parameter 2 to be array, null given in /builder/src/Builder/GenFilesCommand.php on line 232
Step #0: [09-Jun-2021 19:06:00 UTC] PHP Warning: array_key_exists() expects parameter 2 to be array, null given in /builder/src/Builder/GenFilesCommand.php on line 174
Step #0:
Step #0: Warning: array_key_exists() expects parameter 2 to be array, null given in /builder/src/Builder/GenFilesCommand.php on line 174
Step #0: [09-Jun-2021 19:06:00 UTC] PHP Fatal error: Uncaught Error: Unsupported operand types in /builder/src/Builder/GenFilesCommand.php:279
@bhaidar
Copy link
Author

bhaidar commented Jun 10, 2021

For some reason, the variable appYaml is always null, although there is an app.yaml file at the root of the app.

@bhaidar
Copy link
Author

bhaidar commented Jun 11, 2021

Actually, this is a bug in GenFileCommands.php file

 protected function envsFromAppYaml()
            {
                $ret = array_key_exists('env_variables', $this->appYaml)
                    ? $this->appYaml['env_variables']     
                    : [];
     
                $removedEnvVars = [];
                foreach (self::REMOVED_ENV_VARS as $k) {
                    if (array_key_exists($k, $ret)) {
                        $removedEnvVars[] = $k;
                    }
                }
      
                if (count($removedEnvVars) > 0) {
                    throw new RemovedEnvVarException(
                        "There are environment variables which are no more"
                        . "supported. Remove the following keys in "
                        . "'env_variables': "
                        . implode(" ", $removedEnvVars)
                    );
                }
                return $ret;
            }

If we leave the app.yaml file with a section like this:

env_variables:

Then $ret is null. There is no checking for null, it's being used right away inside array_key_exists().

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant