【发布时间】:2020-09-06 12:59:20
【问题描述】:
我有一个 Symfony 网络应用程序。我想将其部署到虚拟专用服务器。
我已经在Laravel HomesteadVagrant box 中开发了应用程序,并且正在通过 Github 操作进行部署。
在我的本地机器上,应用程序在 Vagrant 环境中运行良好,但在将文件同步到实时服务器后,它给了我一个错误屏幕。
警告:需要(/var/www/thebedechkacase.com/src/config/bundles.php): 无法打开流:没有这样的文件或目录
错误来自 Kernel.php 的第 20 行,如下所示
const CONFIG_EXTS = '.{php,xml,yaml,yml}';
public function registerBundles()
{
$contents = require $this->getProjectDir().'/config/bundles.php';
foreach ($contents as $class => $envs) {
if ($envs[$this->environment] ?? $envs['all'] ?? false) {
yield new $class();
}
}
我不明白的是,根据错误信息和上面的代码,$this->getProjectDir() 的输出解析为/var/www/thebedechkacase.com/src/(thebedechkacase.com 是我的应用程序代码存储的文件夹),但是@987654331 @实际上位于/var/www/thebedechkacase.com/config/。
为什么 Symfony 认为projectDir 在src 中,为什么不在根目录(又名thebedechkacase.com/)中寻找config?为什么这在我的开发环境中有效,但在实时服务器上无效?
其他信息:我正在尝试使用我在 Github 操作中调用的 shell 脚本设置必要的环境变量,但是当我在实时服务器上手动检查环境变量时shell,我看到它们都没有设置,所以我的脚本可能首先被破坏(这就是为什么你能够看到默认的 Symfony 错误页面)。这可能与此有关还是这是另一个错误?
可以看到错误的网址: https://thebedechkacase.com/
项目的 Github 存储库: https://github.com/Cooty/the-bedechka-case
部署代码的操作: https://github.com/Cooty/the-bedechka-case/blob/develop/.github/workflows/main.yml
Symfony 版本: 5.0
实时服务器运行 Ubuntu 20.04、Ngingx 和 PHP-FPM 7.4 和 PHP 7.4。
【问题讨论】:
-
您部署的应用是否有 composer.json 文件?如果不是,那可能就是问题所在。您可以查看 HttpKernel::getProjectDir 以查看它设置的目录项目。它从包含您的 Kernel.php 文件(即 src/)的目录开始,然后查找 composer.json 的一级。不知道为什么,但它就是这样。
-
补充一下@Cerad 刚才所说的,这是corresponding source code。我的猜测是在您的 vagrant 设置中的 src/ 中必须有一个 composer.json 文件。
标签: php symfony deployment devops