[英]Deploy Laravel on Google App engine - base_path() wrong
[英]Deploy Laravel on Google App Engine - Flexible
将 Laravel 6 部署到 Google App Engine 后,运行 url https://PROJECT_ID.appspot.com/
时出现此错误。
The stream or file "/app/storage/logs/laravel-2019-12-31.log" could not be opened: failed to open stream: Permission denied
我遵循了https://cloud.google.com/community/tutorials/run-laravel-on-appengine-flexible 2 上给出的说明
这是我的app.yaml文件
runtime: php # language of the app
env: flex # let app engine know we use flexible environment
runtime_config:
document_root: . #folder where index.php is
# Ensure we skip ".env", which is only for local development
skip_files:
- .env #we want to skip this to make sure we don’t mess stuff up on the server
env_variables:
# Put production environment variables here.
APP_ENV: production # or production
APP_DEBUG : true # or false
APP_KEY: YOUR_API_KEY
#go to generate app key paragraf in this tutorial
CACHE_DRIVER: database
# instead of putting the cache in the database I recommend using redis
SESSION_DRIVER: database #or file since both work
APP_LOG: errorlog
APP_TIMEZONE: UTC #your timezone of choice
# follow the part of the tutorial on setting up your SQL database
DB_CONNECTION: mysql
DB_HOST: localhost
DB_DATABASE: XXX
DB_USERNAME: XXX
DB_PASSWORD: XXX
DB_SOCKET: /cloudsql/YOUR_CLOUDSQL_CONNECTION_NAME
QUEUE_DRIVER: database #in case you execute queued jobs
MAIL_DRIVER: mail
MAIL_HOST: smtp.sparkpostmail.com
MAIL_PORT: 587
MAIL_USERNAME: null
MAIL_PASSWORD: null
LOG_DELETE: true # this is a parameter added by us in the project .env file. You can add here any setting you would add to your .env file
GOOGLE_VISION_PROJECT_ID : PROJECT_ID
#we need this for the flex environment
beta_settings:
# for Cloud SQL, set this value to the Cloud SQL connection name,
# e.g. "project:region:cloudsql-instance"
cloud_sql_instances: "YOUR_CLOUDSQL_CONNECTION_NAME"
作曲家.json
"scripts": {
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
],
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate --ansi"
],
"post-install-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postInstall",
"@php artisan optimize",
"chmod -R 755 storage bootstrap\/cache"
],
"post-update-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
"@php artisan optimize"
]
}
我已经在本地机器上测试过并且成功运行。
在 App Engine Flex 环境中,您无法写入文件,因为文件系统是只读的。 不过有一个很好的解决方案,因为您可以将 Stackdriver Logging集成到 Laravel 中。
您需要执行以下命令:
composer require google/cloud-logging google/cloud-error-reporting
此外,您需要更改app/Exceptions/Handler.php
文件中的report
功能:
/**
* Report or log an exception.
*
* @param \Exception $exception
* @return void
*/
public function report(Exception $exception)
{
if (isset($_SERVER['GAE_SERVICE'])) {
Bootstrap::init();
Bootstrap::exceptionHandler($exception);
} else {
parent::report($exception);
}
}
在文件顶部你需要添加use Google\\Cloud\\ErrorReporting\\Bootstrap;
在您的app.yaml
您需要将以下内容添加到env_variables
:
LOG_CHANNEL: stackdriver
在logging.php
您需要将以下内容添加到'channels'
数组中:
'stackdriver' => [
'driver' => 'custom',
'via' => App\Logging\CreateStackdriverLogger::class,
'level' => 'debug',
],
您需要做的最后一件事是在app/Logging
目录中创建CreateStackdriverLogger
类:
<?php
namespace App\Logging;
use Google\Cloud\Logging\LoggingClient;
use Monolog\Handler\PsrHandler;
use Monolog\Logger;
class CreateStackdriverLogger
{
/**
* Create a custom Monolog instance.
*
* @param array $config
* @return \Monolog\Logger
*/
public function __invoke(array $config)
{
$logName = isset($config['logName']) ? $config['logName'] : 'app';
$client = new LoggingClient([
'projectId' => 'YOUR-PROJECT-ID'
]);
$psrLogger = $client->psrLogger($logName);
$handler = new PsrHandler($psrLogger);
$logger = new Logger($logName, [$handler]);
return $logger;
}
}
现在,您的所有日志都会转到 Stackdriver 系统。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.