在GoogleAppEngine上运行Lumen的笔记

使用Google App Engine进行PHP开发

デプロイ後の公開URL http://kaihatsu-laravel5.appspot.com

准备在GAE上所需的内容。

貌似不能使用memcached。虽然不太清楚为什么。

> brew uninstall php55-memcached php55-memcache

由于在GAE开发环境或者本地文件中,DB和日志无法写入,所以需要使用像MySQL/PgSQL这样的外部通信软件。

启动命令

启动开发服务器的命令。

> dev_appserver.py --php_executable_path=/opt/php5/bin/php .

ただし、上手く動いていないっぽい。GoogleAppLauncherからやるのがいい。

Lumen のプロジェクトを作成

> composer.phar create-project laravel/lumen --prefer-dist

GaeSupportLumen をインストール

php artisan gae:setup --config kaihatsu-laravel5

使用从https://github.com/shpasser/GaeSupportL5修改而来的https://github.com/shpasser/GaeSupportLumen来适用于Lumen。

少し工夫:Monologのログ保存の指定で開発時はローカルファイルを指定されているが、GoogleAppLauncher から起動している場合(dev_appserver.py 経由はよくわからない)はログファイルに保存できないといったメッセージが出て実行できない不具合があるので、MonologをSyslogに変えてやる必要がある。なお、GAEサーバで動いている時はSyslogになる。

<?php
/**
 * Created by PhpStorm.
 * User: atys
 * Date: 15/06/16
 * Time: 18:52
 */

namespace App\Foundation;

use Laravel\Lumen\Application as LumenApplication;
use Illuminate\Foundation\ProviderRepository;
use Illuminate\Filesystem\Filesystem;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\StreamHandler;
use Shpasser\GaeSupportLumen\Storage\CacheFs;
use Symfony\Component\VarDumper\Dumper\HtmlDumper;
use Symfony\Component\VarDumper\Dumper\CliDumper;
use Monolog\Handler\SyslogHandler;
use Monolog\Logger;

class Application extends \Shpasser\GaeSupportLumen\Foundation\Application
{
    protected function getMonologHandler()
    {
        return new SyslogHandler('intranet', 'user', Logger::DEBUG, false, LOG_PID);
    }
}

为了在Lumen中使用,需要将$app更改为上述的Application,并进行下面的修改。

<?php

require_once __DIR__.'/../vendor/autoload.php';

// Lumenは標準ではDotenvは読まない
 Dotenv::load(__DIR__.'/../');

/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| Here we will load the environment and create the application instance
| that serves as the central piece of this framework. We'll use this
| application as an "IoC" container and router for this framework.
|
*/

$app = new App\Foundation\Application(
    realpath(__DIR__.'/../')
);

...

进行 Google Cloud SQL 的设置

GoogleCloudSQL = AmazonRDB 类似的东西。

・MySQLドライバーが使えるので、これを使う
・従量制
・地域はアメリカ
・タイプD1の512MB RAM。他にもD2 1GB RAMなどがある。
・希望する場所を「AppEngine アプリ準拠」アプリケーションIDは「kaihatsu-laravel5」
・バックアップを無効(特に意味が無いので)
・アクティベーションポリシーを「オンデマンド」料金をケチるため
・「承認済みの App Engine アプリケーション」に「kaihatsu-laravel5」があるか確認
で作成する。

作成後はGCS にIPv6が割り当てられるので、それを元に設定を作る。

云存储的安装设置

类似于亚马逊S3的东西。

将创建的存储桶名称记下来(本例设为”kaihatsu2015-bucket”)。

部署准备完成

自动生成设置文件

> php artisan gae:setup \
--config \
--bucket="<Bucket名>" \
--db-name="<DB名>" \
--db-host="<IPv6>" \
kaihatsu-laravel5

请注意:
在部署时,所有文件都会被上传,因此需要将开发时创建的文件和配置文件「.env」覆盖为正式环境用的文件,然后进行部署。

$ appcfg.py -A kaihatsu-laravel5 update appengine                                                                                            git:develop - (m1)

Note: the --oauth2 flag is now the default and can be omitted.

03:37 PM Application: kaihatsu-laravel5; version: 1
03:37 PM Host: appengine.google.com
03:37 PM
Starting update of app: kaihatsu-laravel5, version: 1
03:37 PM Getting current resource limits.
03:37 PM Scanning files on local disk.
03:37 PM Scanned 500 files.
2015-06-15 15:37:45,005 ERROR appcfg.py:1917 Invalid character in filename: vendor/symfony/finder/Symfony/Component/Finder/Tests/Fixtures/r+e.gex[c]a(r)s/dir/bar.dat
03:37 PM Scanned 1000 files.
03:37 PM Scanned 1500 files.
03:37 PM Scanned 2000 files.
03:37 PM Scanned 2500 files.
03:37 PM Scanned 3000 files.
03:37 PM Cloning 3372 application files.
03:37 PM Cloned 2000 files.
03:38 PM Compilation starting.
03:38 PM Compilation completed.
03:38 PM Starting deployment.
03:38 PM Checking if deployment succeeded.
03:38 PM Deployment successful.
03:38 PM Checking if updated app version is serving.
03:38 PM Completed update of app: kaihatsu-laravel5, version: 1

如果动起来的话,就是这个样子。

スクリーンショット 2015-06-15 15.42.02.png

日本語ファイル名だめ

~/develop/開発合宿2015 $ appcfg.py -A kaihatsu-laravel5 update appengine-try-php
Note: the --oauth2 flag is now the default and can be omitted.

01:32 PM Host: appengine.google.com
Usage: appcfg.py [options] update <directory> | [file, ...]

appcfg.py: error: Directory '/Users/yasui/Documents/develop/\xe9\x96\x8b\xe7\x99\xba\xe5\x90\x88\xe5\xae\xbf2015' does not contain configuration file appengine-try-php.yaml

请指定项目目录。

~/develop/kaihatsu-gassyuku-2015 $ appcfg.py -A kaihatsu-laravel5 update appengine-try-php 
Note: the --oauth2 flag is now the default and can be omitted.

01:33 PM Host: appengine.google.com
Usage: appcfg.py [options] update <directory> | [file, ...]

appcfg.py: error: Directory '/Users/yasui/Documents/develop/kaihatsu-gassyuku-2015' does not contain configuration file appengine-try-php.yaml

PHP5.4 はダメ

app.yaml で runtime: phpとした時に実行されるのは PHP5.4になるので、runtime: php55としないといけない様子。

~/develop/kaihatsu-gassyuku-2015 $ appcfg.py -A kaihatsu-laravel5 update appengine
Note: the --oauth2 flag is now the default and can be omitted.

01:34 PM Application: kaihatsu-laravel5 (was: helloworld); version: 1
01:34 PM Host: appengine.google.com
01:34 PM
Starting update of app: kaihatsu-laravel5, version: 1
01:34 PM Getting current resource limits.
01:34 PM Scanning files on local disk.
Error 400: --- begin server output ---
PHP 5.4 applications are prevented from being deployed to Google App Engine from any version of the SDK, including older ones. If you need to continue to deploy PHP 5.4 applications for compatibility reasons, you can request that your application be whitelisted for PHP 5.4 deployment by visiting http://goo.gl/qjKEuk.
--- end server output ---

模板等

フルスタックではないので、Laravel5で使える blade の @layout などはない。

由於只是試試看,我用了 https://www.polymer-project.org。

广告
将在 10 秒后关闭
bannerAds