【问题标题】:Deploying Symfony2 on Bluemix在 Bluemix 上部署 Symfony2
【发布时间】:2017-02-28 16:16:04
【问题描述】:

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

我们有一个基于 symfony 标准版发行版的 symfony 应用程序,因为我们也有一个前端,所以将其移动到 backend 文件夹中。 但是,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 上,通过 manifest.yml 将 env 设置为 prod,我们已尝试在本地以相同配置安装 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 上运行)

感谢您的帮助!

【问题讨论】:

    标签: php symfony ibm-cloud buildpack


    【解决方案1】:

    我找到了问题。

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

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

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

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

    cf enable-ssh
    cf ssh
    

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

    我已将 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 不支持环境变量使得仅使用一个文件变得复杂。但那是另一回事了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      相关资源
      最近更新 更多