亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我部署的 Symfony 應用程序無法加載 bundles.php 文件?

為什么我部署的 Symfony 應用程序無法加載 bundles.php 文件?

PHP
有只小跳蛙 2023-12-15 10:42:22
我有一個 Symfony Web 應用程序。我想將其部署到虛擬專用服務器。我在 Laravel Homestead Vagrant box 中開發了該應用程序,并且我 39;我正在通過 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/ (< /span>。 實際上位于 thebedechkacase.com 是存儲我的應用程序代碼的文件夾),但 bundles.php/var/www/thebedechkacase.com/config/為什么 Symfony 認為 projectDir 位于 src 中,而為什么它不查找 config在根目錄中(又名 thebedechkacase.com/)?為什么這在我的開發環境中有效,但在實時服務器上卻不起作用?其他信息: 我正在嘗試使用我在 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< /span>Symfony 版本: 5.0實時服務器運行 Ubuntu 20.04、Ngingx、PHP-FPM 7.4 和 PHP 7.4。
查看完整描述

2 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

我從 rsync 命令的文件列表中排除了composer.json,我認為它只需要安裝依賴項,但并不是 Symfony 也在運行時讀取它。

查看完整回答
反對 回復 2023-12-15
?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

Symfony 將“項目目錄”設置為基于“composer.json”文件位置。 “項目目錄”需要引導應用程序(Web 和 cli)。


這就是為什么當您在沒有“composer.json”的情況下部署應用程序時,例如。對于 Elasticbeanstalk,您需要像這樣修改內核:


use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;

use Symfony\Component\HttpKernel\Kernel as BaseKernel;


class Kernel extends BaseKernel

{

    use MicroKernelTrait;


    /**

     * NOTICE:

     * We don't want to deploy composer.json that's being used to compute project dir, so we will specify it here manually.

     */

    public function getProjectDir()

    {

        return \dirname(__DIR__);

    }


注意被重寫的 getProjectDir() 方法。


查看完整回答
反對 回復 2023-12-15
  • 2 回答
  • 0 關注
  • 191 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號