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

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

我一整天都在尝试将我的 Laravel 6 应用程序部署到 Google App Engine 的标准环境,但似乎我只是停留在如何制作缓存和一些“本地”文件工作。

这是我尝试加载任何页面时遇到的错误:

(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

(...)

我遵循了此 question, this tutorial and this issue 中的每个提示,但似乎任何东西都对我有所帮助。

作为 CACHE_DRIVER,为方便起见,我试图只使用 file,而不是 database 或任何其他。所以,我的 app.yaml,有额外的 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

我知道 /tmp 文件夹 is the only writable folder for the App Engine Standard Environment. 考虑到这一点,我将上面的内容放在 app.yaml,甚至尝试重命名/storage 文件夹到 /tmp。 我已将以下行添加到我的 bootstrap/app.php 文件中:

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

在我的作曲包中,我确保它没有 facade/ignition。此外,由于在将我的应用程序部署到 Google App Engine 后我无法 运行 任何命令,在 composer.json 我有:

        "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"
        ]

我也尝试将 post-install-cmd php artisan storage:link 放在 $app->useStoragePath(env('APP_STORAGE', base_path() . '/storage'));/storage 文件夹作为 storage 本身,但没有任何效果。

我的 /temp(或 /storage,如果这是正确的方法)文件夹中有整个文件夹树用于缓存:

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

此外,除了视图未呈现外,我注意到在尝试加载位于 /public 文件夹的 favicon.ico 时,它 returns 出现 500 错误。我是 AppEngine 的新手,但即使阅读了我能找到的所有内容,我也一直在努力让它发挥作用。非常感谢任何帮助。

我发现我在 /config 上发布了一些配置文件,除了更改 /bootstrap/app.php 之外,其中一些还有自己的 /storage 文件夹路径。因此,我的解决方案只是放弃使用文件缓存,对于视图缓存和我拥有的其他一些包,在它们各自的配置文件中使用路径 /tmp。此外,我从作曲家删除了所有缓存清理 artisan 命令,因为我没有发送任何缓存文件进行部署。

此外,我需要进行一些更改才能访问 /public 文件,例如一些本地 css 和 js。为此,我关注了these docs.

我今天遇到了同样的问题,解决方案是我将 config/view.php 中的 'compiled' 值更改为根文件夹:

  1. 转到根目录。
  2. mkdir compiled_views
  3. 'compiled' 值更改为 'compiled' => realpath(base_path('compiled_views/')),

我通过在 config/view.php 中显式添加 APP_STORAGE env 来解决它:

'compiled' => realpath(env('APP_STORAGE', realpath(storage_path('framework/views')))),

(这令人惊讶,因为我确实将 $app->useStoragePath(env('APP_STORAGE', base_path() . '/storage')); 添加到 app.php - 但它似乎还没有(?)覆盖 storage_path