【问题标题】:Deploy Laravel 6 App on Google App Engine Standard Error: Please provide a valid cache path在 Google App Engine 上部署 Laravel 6 应用程序标准错误:请提供有效的缓存路径
【发布时间】:2020-08-09 08:16:59
【问题描述】:

我整天都在尝试将我的 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

(...)

我遵循了questiontutorialissue 的所有提示,但似乎有任何帮助。

作为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 时,它会返回 500 错误。我是 AppEngine 的新手,但即使阅读了我能找到的所有内容,我也一直在努力让它发挥作用。非常感谢任何帮助。

【问题讨论】:

  • base_path()的内容是什么?因为它应该是空的 ("") 让环境变量 APP_STORAGE/tmp

标签: php laravel google-app-engine caching google-app-engine-php


【解决方案1】:

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

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

【讨论】:

  • 它对你有用吗?我一直有同样的问题,现在已经挣扎了一天:(
【解决方案2】:

我今天遇到同样的问题,解决办法是我将 config/view.php 中的“编译”值更改为根文件夹:

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

【讨论】:

    【解决方案3】:

    我通过在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

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 2016-12-20
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      相关资源
      最近更新 更多