Search code examples
phplaravelgoogle-app-enginecachinggoogle-app-engine-php

Deploy Laravel 6 App on Google App Engine Standard Error: Please provide a valid cache path


I've been trying to deploy my Laravel 6 App to the standard environment of Google App Engine the whole day, but seems like I'm just stuck at how to make cache and some "local" files to work.

This is the error I get when I try to load any page:

(1/1) InvalidArgumentException
Please provide a valid cache path.

in Compiler.php line 36
at Compiler->__construct(object(Filesystem), false)
in ViewServiceProvider.php line 92
at ViewServiceProvider->Illuminate\View\{closure}(object(Application), array())
in Container.php line 799
at Container->build(object(Closure))
in Container.php line 681
at Container->resolve('blade.compiler', array(), true)
in Application.php line 785

(...)

I followed every tip at this question, this tutorial and this issue, but anything seemed to help me.

As CACHE_DRIVER, for convenience, I'm trying to just use file, instead of database or any other else. So, my app.yaml, have the additional env_variables :

 CACHE_DRIVER: file
 SESSION_DRIVER: cookie
 APP_STORAGE: /tmp
 VIEW_COMPILED_PATH: /tmp
 APP_SERVICES_CACHE: /tmp/services.php
 APP_PACKAGES_CACHE: /tmp/packages.php
 APP_CONFIG_CACHE: /tmp/config.php
 APP_ROUTES_CACHE: /tmp/routes.php

I know that the /tmp folder is the only writable folder for the App Engine Standard Environment. With that in mind, I put the above at app.yaml, and even tried renaming /storage folder to /tmp. I've added the following line to my bootstrap/app.php file:

$app->useStoragePath(env('APP_STORAGE', base_path() . '/tmp'));

At my composer packages, I made sure that it doesn't have facade/ignition. Also, as I can't run any command after deploy my app to Google App Engine, at composer.json I have:

        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump"
        ],
        "post-install-cmd": [
            "composer dump-autoload",
            "php artisan config:clear",
            "php artisan view:clear",
            "php artisan cache:clear"
        ]

I also tried to put at post-install-cmd php artisan storage:link, while using $app->useStoragePath(env('APP_STORAGE', base_path() . '/storage')); and the /storage folder as storage itself, but nothing worked.

I have the whole folder tree for caching at my /temp (or /storage, if this is the right way) folder:

/tmp
    /framework
        /cache
            /data
        /sessions
        /testing
        /views
    /logs
    /medialibrary
        /temp

Also, besides the views not rendering, I noticed that when trying to load the favicon.ico, located at /public folder, it returns an 500 error. I am new to AppEngine, but even reading everything I can find I've been struggling to make it work. I really appreciate any help.


Solution

  • I figured out I had some config files published at /config, and besides changing /bootstrap/app.php, some of them had their own path to /storage folder. So, my solution was just gave up on using files cache, and for the views cache, and some other packages I had, use the path /tmp, at their respective config files. Also, I removed all cache cleaning artisan commands from composer, as I wasn't sending any cache files to deploy.

    Also, I needed to make some changes in order to be able to access /public files, like some local css and js. For this, I followed these docs.