将Symfony应用程序部署到Google App Engine

时间:2016-04-03 12:57:48

标签: php symfony google-app-engine google-cloud-platform

我已经阅读了https://cloud.google.com/appengine/docs/php/symfony-hello-world上的文档,我设法部署了Hello World应用程序,但是当我尝试使用我的symfony应用程序时,我发现了他的错误:

XmlFileLoader.php第259行中的InvalidArgumentException:无法解析文件“(...)DependencyInjection /../ Resources / config \ web.xml”。

在app.yaml中我设置了env变量:

env_variables:

GCS_BUCKET_NAME: "pinterpandaibucket"
CACHE_DIR: "gs://pinterpandaibucket/symfony/cache"
LOG_DIR: "gs://pinterpandaibucket/symfony/log"

我重载了AppKernel.php函数:

public function __construct($ environment = null,$ debug = null)     {         //根据是否正在运行来确定环境/调试配置         //在App Engine的Dev App Server或生产中         if(is_null($ debug)){             $ debug =!Environment :: onAppEngine();         }

    if (is_null($environment)) {
        $environment = $debug ? 'dev' : 'prod';
    }

    parent::__construct($environment, $debug);

    // Symfony console requires timezone to be set manually.
    if (!ini_get('date.timezone')) {
      date_default_timezone_set('UTC');
    }

    // Enable optimistic caching for GCS.
    $options = ['gs' => ['enable_optimsitic_cache' => true]];
    stream_context_set_default($options);

    $this->gcsBucketName = getenv('GCS_BUCKET_NAME');

...

public function getCacheDir()
{
    if ($this->gcsBucketName) {
        return getenv('CACHE_DIR');
    }

    return parent::getCacheDir();
}

public function getLogDir()
{
    if ($this->gcsBucketName) {
        return getenv('LOG_DIR');
    }

    return parent::getLogDir();
}

public function registerContainerConfiguration(LoaderInterface $loader)
{
    $loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
}
}
?>

写入文件系统的函数被重定向到存储桶。

你能帮我找一下我的应用程序中缺少哪些修改。

我希望此主题可以帮助其他人,因为Google云文档不是最新的。

提前感谢,如果我不会说英语,我很抱歉,我是法国IT学生。

奥古斯丁

1 个答案:

答案 0 :(得分:1)

我花了很多时间来处理这个可怕的bug,我发现这个问题发生在Dev AppServer上,但不是在生产中。我相信在该环境中实现xml.so php扩展是一个问题。

这在symfony starter app中使用fixXmlFileLoaderBug方法修复,该方法在web/app.php中调用。所以要确保这个被调用,你应该好好去。

如果您在制作中遇到此错误,或者即使在调用此函数后仍然遇到此问题,请通过github上的filing an issue告知我们。