dev-master
9999999-devComponents to support Symfony components in Google App Engine
MIT
Components to support Symfony components in Google App Engine
This package supports Symfony and related components on Google App Engine., (*1)
syslog()
facility.Add to composer.json
:, (*2)
{ "repositories": [ { "type": "vcs", "url": "https://github.com/caxy/AppEngineBridge.git" } ], "require": { "caxy/appengine-bridge": "~1.0@dev" } }
Register the AppEngineProvider
after your other providers have been registered., (*3)
<?php $app->register(new \Caxy\AppEngine\Bridge\Pimple\Provider\AppEngineProvider());
Make sure that the php55
runtime is set in your app.yaml
or else Silex will fail
because tempnam()
support is only in php55
., (*4)
Use the Google App Engine configuration file app.yaml
to set environment variables.
Using the php55
runtime is required. The SYMFONY__APP_ENGINE__DEFAULT_BUCKET_NAME
value becomes a container parameter and is used to set up cache and log directories. Here
is a work-in-progress example:, (*5)
application: SOMETHING version: 1 runtime: php55 api_version: 1 threadsafe: true handlers: - url: /bundles static_dir: web/bundles - url: .* script: web/app.php skip_files: - ^(.*/)?#.*#$ - ^(.*/)?.*~$ - ^(.*/)?.*\.py[co]$ - ^(.*/)?.*/RCS/.*$ - ^(.*/)?\..*$ - ^(.*/)?.*/Tests/.*$ - var/cache/* - var/logs/* env_variables: SYMFONY_ENV: prod SYMFONY_DEBUG: 0 SYMFONY__APP_ENGINE__DEFAULT_BUCKET_NAME: 'SOMETHING.appspot.com'
Replace your front controller entirely so you can switch between environments using the
app.yaml
environment variable. The example here is a combination of Symfony framework
Standard Edition's app.php
and app_dev.php
., (*6)
<?php use Symfony\Component\ClassLoader\ApcClassLoader; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Debug\Debug; $loader = require_once __DIR__.'/../var/bootstrap.php.cache'; if ((bool) $_SERVER['SYMFONY_DEBUG']) { Debug::enable(); } // Enable APC for autoloading to improve performance. // You should change the ApcClassLoader first argument to a unique prefix // in order to prevent cache key conflicts with other applications // also using APC. /* $apcLoader = new ApcClassLoader(sha1(__FILE__), $loader); $loader->unregister(); $apcLoader->register(true); */ require_once __DIR__.'/../app/AppKernel.php'; //require_once __DIR__.'/../app/AppCache.php'; $kernel = new AppKernel($_SERVER['SYMFONY_ENV'], (bool) $_SERVER['SYMFONY_DEBUG']); $kernel->loadClassCache(); //$kernel = new AppCache($kernel); // When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter //Request::enableHttpMethodParameterOverride(); $request = Request::createFromGlobals(); $response = $kernel->handle($request); $response->send(); $kernel->terminate($request, $response);
Replace the Kernel that your AppKernel
extends., (*7)
diff --git a/app/AppKernel.php b/app/AppKernel.php index 7673684..0d03d5a 100644 --- a/app/AppKernel.php +++ b/app/AppKernel.php @@ -1,6 +1,6 @@ <?php -use Symfony\Component\HttpKernel\Kernel; +use Caxy\AppEngine\Bridge\HttpKernel\Kernel; use Symfony\Component\Config\Loader\LoaderInterface; class AppKernel extends Kernel
Establish memcache
session handler. In app/config/services.yml
:, (*8)
services: session.memcache: class: Memcache session.handler.memcache: class: Symfony\Component\HttpFoundation\Session\Storage\Handler\MemcacheSessionHandler arguments: [ @session.memcache ]
The Symfony profiler can store data in Memcached too. The specific host and port of this
DSN are not important as GAE supplies its own PHP Memcache
object., (*9)
framework: profiler: dsn: 'memcache://localhost:11211'
Use the syslog
Monolog handler. The ident
value is unimportant but required for
Symfony to instantiate the handler:, (*10)
monolog: handlers: main: type: fingers_crossed action_level: debug handler: syslog syslog: type: syslog ident: whatever
In your composer.json
add a new scripts
entry so that you can deploy easily from
composer., (*11)
{ "scripts": { "appengine-update": [ "appcfg.py update . --oauth2" ] } }
Now you can deploy with the command composer appengine-update
. Additional commands can
be stacked together., (*12)
{ "scripts": { "appengine-update": [ "composer dumpautoload -o", "appcfg.py update . --oauth2" ] } }
Components to support Symfony components in Google App Engine
MIT