在成功构建错误空白屏幕后将Symfony2从TravisCI部署到Heroku


Deploying Symfony2 from TravisCI to Heroku after successful build error blank screen

我得到一个空白屏幕,但这是错误日志的结果。它似乎在/tmp/build_xxxx 之前预处理所有内容...

开发和生产在本地都能正常工作。

代码在这里...https://github.com/TransformCore/dial-tone-frontend

2014-11-25T14:43:27.388147+00:00 heroku[router]: at=info method=GET path="/css/bootstrap.css" host=dial-tone-frontend.herokuapp.com request_id=1bdcc1f4-4d8b-42b0-a85d-8b265d2665bd fwd="80.5.64.178" dyno=web.1 连接=1ms 服务=8ms 状态=500 字节=208 2014-11-25T14:43:27.388931+00:00 app[web.1]: [2014-11-25 14:43:27] 请求。关键:未捕获的 PHP 异常 无效参数异常:"文件 "/tmp/build_23552b1c8333d8e8b9b475444451531c/app/config/routing.yml" 不存在。 在/app/app/cache/prod/classes.php 第 1575 行 {"exception":"[object] (InvalidArgumentException: 文件 ''"/tmp/build_23552b1c8333d8e8b9b475444451531c/app/config/routing.yml''" 不存在。 at/app/app/cache/prod/classes.php:1575)"} [] 2014-11-25T14:43:27.390315+00:00 app[web.1]: [2014 年 11 月 25 日 14:43:27 UTC] PHP 致命错误:未捕获的异常"InvalidArgumentException",消息为"文件"/tmp/build_23552b1c8333d8e8b9b475444451531c/app/config/routing.yml"不存在.php。 2014-11-25T14:43:27.390355+00:00 app[web.1]: 堆栈跟踪: 2014-11-25T14:43:27.390525+00:00 app[web.1]: #0/app/app/cache/prod/classes.php(2301): Symfony''Component''Config''FileLocator->locate('/tmp/build_2355...', NULL, true) 2014-11-25T14:43:27.390779+00:00 app[web.1]: #1/app/vendor/symfony/symfony/src/Symfony/Component/Routing/Loader/YamlFileLoader.php(49): Symfony''Component''HttpKernel''Config''FileLocator->locate('/tmp/build_2355...') 2014-11-25T14:43:27.391220+00:00 app[web.1]: #3/app/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Routing/DelegatingLoader.php(58): Symfony''Component''Config''Loader''DelegatingLoader->load('/tmp/build_2355...', NULL) 2014-11-25T14:43:27.391369+00:00 app[web.1]: #4/app/app/cache/prod/classes.php(1502): Symfony''Bundle''FrameworkBundle''Routing''De委派Loader->load('/tmp/build_2355...', NULL) 2014-11-25T14:43:27.391484+00:00 app[web.1]: #5/app/app/cache/prod/classes.php( in/app/app/cache/prod/classes.php on line 1575 2014-11-25T14:43:27.391759+00:00 app[web.1]: 10.36.138.222 - - [25/Nov/2014:14:43:27 +0000] "GET/css/bootstrap.css HTTP/1.1" 500 - "-" "Mozilla/5.0 (Macintosh;Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" 2014-11-25T14:43:27.389956+00:00 app[web.1]: [2014-11-25 14:43:27] 请求。严重:处理异常时引发异常(Twig_Error_Loader:"/tmp/build_23552b1c8333d8e8b9b475444451531c/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/views"目录不存在。{"exception":"[object] (InvalidArgumentException: 文件 ''"/tmp/build_23552b1c8333d8e8b9b475444451531c/app/config/routing.yml''" 不存在。 at/app/app/cache/prod/classes.php:1575)"}[] 2014-11-25T14:43:27.390994+00:00 app[web.1]: #2/app/vendor/symfony/symfony/src/Symfony/Component/Config/Loader/DelegatingLoader.php(45): Symfony''Component''Routing''Loader''YamlFileLoader->load('/tmp/build_2355...', NULL)

我认为问题是在生产环境中使用"%kernel.root_dir%"的缓存版本。

Heroku 在类似 '/tmp/build...' 的目录中构建 slug但在目录/app 中运行它。

我发现的唯一解决方法是更改用于计算根目录的逻辑。

我更改了我的"应用程序/应用程序内核.php"添加此方法:

public function getRootDir()
{
  if (isset($_ENV['SYMFONY_ENV']) && $_ENV['SYMFONY_ENV'] == 'prod') {
    // Workaround to avoid problem with the slug of heroku
    return '/app/app';
  }
  return parent::getRootDir();
}