在Bluemix上部署Symfony2

时间:2017-02-28 16:16:04

标签: php symfony ibm-cloud buildpack

我们正在尝试在bluemix上部署symfony2应用程序,但没有成功......我们已经看到一些关于此类问题的帖子,但它们要么没有答案,要么已过时,或者问题略有不同。

我们有一个基于symfony标准版发行版的symfony应用程序,在后端文件夹中移动,因为我们还有一个前端。 但是,composer.json位于根目录中,并引用后端文件夹。这是唯一的修改。

一切都在本地工作正常,但不是在使用PHP buildpack的Bluemix上,这是错误:

Generating autoload files

  [RuntimeException]                                                                                             
  Could not scan for classes inside "backend/app/AppKernel.php" which does not appear to be a file nor a folder  

在Bluemix上,env设置为通过 manifest.yml 生成,我们在本地尝试了相同配置的composer安装:

 applications:
 - name: myapp
   random-route: true
   memory: 128M
   env:
    SYMFONY_ENV: prod
    #BP_DEBUG: true

这个错误是我用详细模式得到的错误,而且我没有详细模式。我们在Bluemix上以no-dev模式运行,这里是完整的 options.json

{
    "COMPOSER_INSTALL_OPTIONS": [ "--no-dev", "-vvv"]
}

我尝试添加脚本以进行调试。它在本地运行良好,但在Bluemix上运行不佳,所以它根本没用。摘自 composer.json

"scripts": {
    "pre-autoload-dump": [
        "echo TEST"
    ],
    ...
}

该文件存在且位于正确的位置:

   $ ll backend/app/
    total 128
    drwxr-xr-x 6 bob bob  4096 févr. 28 15:45 .
    drwxr-xr-x 9 bob bob  4096 févr. 28 15:44 ..
    -rwxr-xr-x 1 bob bob   101 févr. 23 11:37 AppCache.php
    -rwxr-xr-x 1 bob bob  1394 févr. 24 11:32 AppKernel.php
    -rwxr-xr-x 1 bob bob   263 févr. 23 11:37 autoload.php
    -rw-r--r-- 1 bob bob 40956 févr. 28 15:45 bootstrap.php.cache
    drwxr-xr-x 3 bob bob  4096 févr. 28 15:45 cache
    -rwxr-xr-x 1 bob bob  3909 févr. 28 15:45 check.php
    drwxr-xr-x 2 bob bob  4096 févr. 28 14:37 config
    -rwxr-xr-x 1 bob bob   897 févr. 22 15:28 console
    -rwxr-xr-x 1 bob bob   143 févr. 23 11:37 .htaccess
    drwxr-xr-x 2 bob bob  4096 févr. 28 14:37 logs
    -rwxr-xr-x 1 bob bob  1358 févr. 23 11:37 phpunit.xml.dist
    drwxr-xr-x 3 bob bob  4096 févr. 23 11:37 Resources
    -rwxr-xr-x 1 bob bob 34272 févr. 28 15:45 SymfonyRequirements.php

似乎就像 composer.json 中的配置是正确的(寻找正确的位置)。本地使用相同的文件没有任何问题:

"extra": {
        "symfony-app-dir": "backend/app",
        "symfony-web-dir": "backend/web",
        ...
}

我想到的最后一件事是我在执行新的 cf push 之前做了 cf delete myapp ,以确保在Bluemix上考虑最新的文件(因为我不明白为什么自动加载转储脚本不能在Bluemix上运行)

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我找到了这个问题。

首先,我通过这样做找到了它:

我在编辑器中添加了no-script和no-autoloader选项,以确保容器能够运行并且我能够连接到它以查看文件系统。没有它,容器就会被破坏,而且无法知道发生了什么。

"COMPOSER_INSTALL_OPTIONS_DEBUG": [ "--no-dev", "-vvv", "--no-autoloader", "--no-scripts"]

然后我用ssh连接到容器(只有Diego):

cf enable-ssh
cf ssh

然后,通过查看文件系统,我发现后端前端文件夹放在 htdocs 文件夹中。

我已将我的composer.json更改为引用 htdocs / backend / 而不是 backend / ,一切正常。来自 composer.json 文件的示例:

    "autoload": {
        "psr-4": { "": "htdocs/backend/src/" },
        "classmap": [ "htdocs/backend/app/AppKernel.php", "htdocs/backend/app/AppCache.php" ]
    },

现在的问题是我在本地环境(一切都在 ./ 中)和容器(一切都在 htdocs / )之间有不同的行为,并且composer.json不支持环境变量使得仅使用一个文件变得复杂。但这是另一个故事。