我的 Laravel 应用程序在 Google Cloud 上出现问题。无法打开流或文件“/srv/storage/logs/laravel.log”

Posted

技术标签:

【中文标题】我的 Laravel 应用程序在 Google Cloud 上出现问题。无法打开流或文件“/srv/storage/logs/laravel.log”【英文标题】:my Laravel application has a problem on Google Cloud. The stream or file "/srv/storage/logs/laravel.log" could not be opened 【发布时间】:2019-06-04 07:25:19 【问题描述】:

laravel 应用程序在我的本地运行良好。 但是当我使用命令gcloud app deploy 将其上传到 Google App Engine 时。然后它给我写日志的错误。

UnexpectedValueException
The stream or file "/srv/storage/logs/laravel.log" could not be opened: failed to open stream: Read-only file system

代码是我的 laravel 应用根目录下的 app.yaml 文件。

版权所有 2015 Google Inc. 保留所有权利。

运行时:php72

api_version: 1

线程安全:真

运行时配置: document_root:公共

处理程序: - 网址:/favicon.ico 静态文件:public/favicon.ico 上传:public/favicon.ico

网址:.* 脚本:自动

env_variables: # 取消注释以下内容以启用调试模式。

APP_DEBUG: 0

APP_LOG:错误日志 APP_KEY: base64:nzd12xL4YtD3fIKYYRc/NGIfA+phk39fGJrvq11UBug= APP_LOG_LEVEL:调试 STORAGE_DIR: /tmp

DB_HOST: '' DB_USERNAME: '' DB_PASSWORD: '' DB_DATABASE: ''

CACHE_DRIVER:内存缓存 SESSION_DRIVER:内存缓存 MAIL_DRIVER: '邮件' LOG_DRIVER: '系统日志'

STORAGE_PATH: 'gs://#default#/laravel/storage'

enter image description here

【问题讨论】:

After installing Laravel, you may need to configure some permissions. Directories within the storage and the bootstrap/cache directories should be writable by your web server or Laravel will not run. If you are using the Homestead virtual machine, these permissions should already be set. Read-Only File System after Upgrade Kernel under CentOS 7的可能重复 File permissions for Laravel 5 (and others)的可能重复 【参考方案1】:

您需要按照这些说明中的步骤 (1) 和 (3) 重写 Laravel 存储内容的位置:

https://cloud.google.com/community/tutorials/run-laravel-on-appengine-standard

简单地说-

第一步,在app.yaml中需要添加:

APP_STORAGE: /tmp

然后在第 3 步中让 Laravel 使用它。通过在 return 语句之前添加以下代码块来修改 bootstrap/app.php。这将允许您将存储路径设置为 /tmp 以在生产中进行缓存。

# [START] Add the following block to `bootstrap/app.php`
/*
|--------------------------------------------------------------------------
| Set Storage Path
|--------------------------------------------------------------------------
|
| This script allows you to override the default storage location used by
| the  application.  You may set the APP_STORAGE environment variable
| in your .env file,  if not set the default location will be used
|
*/
$app->useStoragePath(env('APP_STORAGE', base_path() . '/storage'));
# [END]

【讨论】:

以上是关于我的 Laravel 应用程序在 Google Cloud 上出现问题。无法打开流或文件“/srv/storage/logs/laravel.log”的主要内容,如果未能解决你的问题,请参考以下文章

如何在 google firebase 上托管我的 laravel 项目

使用/ Laravel多语言在Google上定位良好?

在 Google Cloud 中使用 Laravel 8 的 Docker 容器的 503“服务不可用”

连接需要具有 ssl 模式的 laravel google cloud postgres 中的有效客户端证书

在 Laravel 5 中使用 Google Drive Api

在 Laravel 中使用 Google Drive API