在 Bluemix 上部署 Symfony2
Deploying Symfony2 on Bluemix
我们正在尝试在 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 上,env 被设置为通过 manifest.yml 生产,我们已经尝试在本地以相同的配置安装 composer:
applications:
- name: myapp
random-route: true
memory: 128M
env:
SYMFONY_ENV: prod
#BP_DEBUG: true
这个错误是我在详细模式下得到的,我在没有详细模式的情况下也完全一样。我们 运行 在 Bluemix 上处于非开发模式,这里是完整的 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 上没有预自动加载转储脚本 运行)
感谢您的帮助!
我找到问题了。
首先,我是这样找到的:
我已将 no-script 和 no-autoloader 选项添加到 composer,以确保容器 运行 并且我能够连接到它以查看文件系统。否则,容器将被破坏,并且无法知道发生了什么。
"COMPOSER_INSTALL_OPTIONS_DEBUG": [ "--no-dev", "-vvv", "--no-autoloader", "--no-scripts"]
然后我用 ssh 连接到容器(只用 Diego):
cf enable-ssh
cf ssh
然后,通过查看文件系统,我发现 backend 和 frontend 文件夹放在 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 不支持环境变量使得仅使用一个文件变得复杂。但那是另外一回事了。
我们正在尝试在 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 上,env 被设置为通过 manifest.yml 生产,我们已经尝试在本地以相同的配置安装 composer:
applications:
- name: myapp
random-route: true
memory: 128M
env:
SYMFONY_ENV: prod
#BP_DEBUG: true
这个错误是我在详细模式下得到的,我在没有详细模式的情况下也完全一样。我们 运行 在 Bluemix 上处于非开发模式,这里是完整的 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 上没有预自动加载转储脚本 运行)
感谢您的帮助!
我找到问题了。
首先,我是这样找到的:
我已将 no-script 和 no-autoloader 选项添加到 composer,以确保容器 运行 并且我能够连接到它以查看文件系统。否则,容器将被破坏,并且无法知道发生了什么。
"COMPOSER_INSTALL_OPTIONS_DEBUG": [ "--no-dev", "-vvv", "--no-autoloader", "--no-scripts"]
然后我用 ssh 连接到容器(只用 Diego):
cf enable-ssh
cf ssh
然后,通过查看文件系统,我发现 backend 和 frontend 文件夹放在 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 不支持环境变量使得仅使用一个文件变得复杂。但那是另外一回事了。