我们正在尝试在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上运行)
感谢您的帮助!
答案 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不支持环境变量使得仅使用一个文件变得复杂。但这是另一个故事。