dvisbeen/gae-support-l5-snitcher

为Laravel 5.1应用提供Google App Engine支持。

dev-master 2016-04-21 08:22 UTC

This package is not auto-updated.

Last update: 2024-09-20 19:14:43 UTC


README

Join the chat at https://gitter.im/shpasser/GaeSupportL5 Latest Stable Version Total Downloads Latest Unstable Version License

Google App Engine(GAE)支持Laravel 5.1的包。

当前支持的功能

  • 生成通用配置文件
  • 邮件服务提供者
  • 队列服务提供者
  • 数据库连接
  • 文件系统

关于Lumen,请参阅https://github.com/shpasser/GaeSupportLumen

安装

使用Composer拉取包。

"require": {
    "shpasser/gae-support-l5": "~1.0"
}

然后在config/app.php中包含服务提供者。

'providers' => [
    Shpasser\GaeSupportL5\GaeSupportServiceProvider::class
];

使用方法

生成GAE相关的文件/条目。

命令模板

php artisan gae:setup --config --cache-config --bucket="your-bucket-id" --db-socket="cloud-sql-instance-socket-connection-string" --db-name="cloud-sql-database-name" --db-host="cloud-sql-instance-ipv4-address" app-id

参数和选项

php artisan gae:setup [options] [--] app-id

Arguments:
  app-id                     GAE application ID.

Options:
      --config               Generate "app.yaml" and "php.ini" config files.
      --cache-config         Generate cached Laravel config file for use on Google App Engine.
      --bucket=BUCKET        Use the specified GCS-bucket instead of the default one.
      --db-socket=DB-SOCKET  Cloud SQL socket connection string for production environment.
      --db-name=DB-NAME      Cloud SQL database name.
      --db-host=DB-HOST      Cloud SQL database host IPv4 address for local environment.

--cache-config选项生成GAE的缓存配置文件。此选项是必需的,因为由php artisan config:cache生成的缓存配置文件不适合在GAE上使用。此外,为GAE生成的缓存配置文件可能在本地环境中也无法正常工作。应使用此选项在应用程序部署到GAE之前生成缓存配置文件。

--bucket选项定义应用程序用于存储的GCS-bucket ID。除非使用该选项,否则默认配置GCS bucket。

当定义了--db-name选项时,至少应定义--db-socket--db-host之一。

--db-socket使用以下格式设置:/cloudsql/<app-id>:<cloud-sql-instance-name>。其中<cloud-sql-instance-name>是Cloud SQL实例名称,<app-id>是该应用程序所属的应用程序名称。

邮件

邮件驱动配置可在config/mail.php.env.production中找到,这些配置文件由artisan命令修改/生成。无需任何自定义配置。所有发出的邮件消息都使用应用程序管理员地址发送,即admin@your-app-id.appspotmail.com。支持电子邮件消息的sendertoccbccreplyTosubjectbodyattachment部分。

队列

修改后的队列配置文件config/queue.php应包含以下内容

return array(

	...

	/*
	|--------------------------------------------------------------------------
	| GAE Queue Connection
	|--------------------------------------------------------------------------
	|
	*/

	'connections' => array(

		'gae' => array(
			'driver'	=> 'gae',
			'queue'		=> 'default',
			'url'		=> '/tasks',
			'encrypt'	=> true,
		),

		...

	),

);

默认使用'default'队列和加密。为了使用队列,您的app/Http/routes.php文件应包含以下路由

Route::post('tasks', array('as' => 'tasks',
function()
{
	return Queue::marshal();
}));

此路由将由GAE队列用于推送任务。请注意,路由和GAE队列连接的'url'参数指向相同的URL。由于通过该路由提交的请求是由GAE本身发出的,因此它不能受到CSRF保护。有关更多信息,请参阅https://laravel.net.cn/docs/5.0/queues#push-queues

缓存、会话和日志

通过使用特定的驱动程序/处理程序支持缓存、会话和日志组件

  • 缓存 - 使用'memcached'驱动程序
  • 会话 - 使用'memcached'驱动程序
  • 日志 - 使用'syslog'处理程序

提到的驱动程序/处理程序的配置选项由artisan命令生成,并可在.env.production配置文件中找到。

数据库

通过Laravel的MySql驱动程序支持Google Cloud SQL。连接配置由artisan命令添加到config/database.php中的cloudsql下。可以通过--db-socket--db-name--db-host选项通过artisan命令配置连接参数。

数据库相关环境变量设置在 .env.production.env.local 文件中。

生产环境配置为使用套接字连接,而本地环境配置为通过 Google Cloud SQL 实例的 IPv4 地址连接。使用 Google 开发者控制台以获取套接字连接字符串并启用数据库实例的 IPv4 地址。

仅在工作于 local 环境时支持迁移。

要使用 productionlocal 环境,将相应的文件重命名为 .env

文件系统

为了在 GAE 上支持 Laravel 文件系统,Artisan 命令修改了 config/filesystem.php 以包含一个额外的磁盘

'gae' => [
    'driver' => 'gae',
    'root'   => storage_path().'/app',
],

并在 .env.production 文件中添加以下行

FILESYSTEM = gae

优化

优化允许应用程序减少对 GCS 的使用,GCS 是目前在 GAE 平台上唯一可用的读写存储。

为了优化视图编译,可以使用的包含的 cachefs 文件系统来存储使用 memcached 服务编译的视图。cachefs 不提供应用程序可靠的存储解决方案,使用 memcached 存储的信息将根据 memcached 规则进行管理,并且可能被 memcached 删除。由于视图可以在不损失任何信息的情况下重新编译,因此使用 cachefs 存储编译后的视图是合适的。

cachefs 具有以下结构

/
+-- bootstrap
    +-- cache
+-- framework
    +-- views

'/framework/views' 用于存储编译后的视图。

要启用此功能,请在 .env.production 和/或 .env.local 文件中使用以下选项

CACHE_COMPILED_VIEWS = true

'/bootstrap/cache' 用于存储 services.jsonconfig.phproutes.php 文件,为了控制这些文件的缓存,请在 .env.production 和/或 .env.local 文件中使用以下选项

CACHE_SERVICES_FILE = true
CACHE_CONFIG_FILE = true
CACHE_ROUTES_FILE = true

要使用 config.php,首先使用 php artisan gae:setup 命令的 --cache-config 选项生成它。routes.php 必须使用 php artisan route:cache 命令生成。

与缓存相关的选项

  • 在 GAE 和/或在本地环境中受支持,只要存在 memcached 服务
  • 在执行 php artisan gae:setup 命令时禁用。

此外,可以跳过 GSC 存储桶的初始化以提高性能。要这样做,请在 app.yaml 文件中设置以下选项

env_variables:
        GAE_SKIP_GCS_INIT: true

存储路径将设置为 GCS 存储桶的 /storage 目录,并将跳过存储目录结构的创建。

如果不使用,可以删除文件系统初始化以最大限度地减少 GCS 使用。要这样做,请从 .env.production 文件中删除以下行

FILESYSTEM = gae

适用于 GAE 的 Artisan 控制台

为了在 GAE 上运行时支持 artisan 命令,该软件包提供了 Artisan Console for GAE。控制台作为独立服务实现,出于安全原因默认不启用。要安全地使用控制台,必须保护 /artisan 路由。

安装

config/app.php 中包含服务提供者。

'providers' => [
    Shpasser\GaeSupportL5\GaeArtisanConsoleServiceProvider::class
];

/artisan URL 处理程序添加到 app.yaml 文件。

handlers:

        - url: /artisan
          script: public/index.php
          login: admin
          secure: always

        - url: /.*
          script: public/index.php

/artisan URL 处理程序必须出现在最后一个处理程序(url: /.*)之前,否则它将被 GAE 忽略。建议的处理程序使用 GAE URL 安全选项来保护路由。有关更多信息,请参阅 https://cloud.google.com/appengine/docs/php/config/appconfig#PHP_app_yaml_Secure_URLs

使用方法

在您的浏览器中输入URL http://your-app-id.appspot.com/artisan,并使用显示的表单提交artisan命令。由于GAE的文件系统是只读的,因此命令无法对其执行写/更新操作。出于同样的原因,迁移必须在部署之前在本地开发环境中准备。由于控制台不是真正的交互式,所有命令都以非交互模式执行(通过自动追加-n选项)。

部署

如果需要,备份现有的.env文件,并在部署您的应用程序之前将生成的.env.production重命名为.env

下载并安装PHP的GAE SDK,然后部署您的应用程序。

已知问题

截至目前,在GAE上运行时,Laravel计划的任务不支持。为了使用Artisan Console for GAE,必须编辑应用程序类app/Console/Kernel,并且使用其schedule()函数计划的所有命令都应该被删除。