【问题标题】:Symfony 4 deployment not workingSymfony 4 部署不工作
【发布时间】:2018-05-20 03:33:01
【问题描述】:

我正在尝试在我的服务器上部署一个 symfony 4 项目,但我无法完成它的生产(在本地它运行良好)。

之前我在我的服务器上部署了很多 symfony 3 项目,所以我决定测试一个 Symfony 4。

这是我在日志中遇到的错误:

[Wed Dec 06 10:26:33.141952 2017] [:error] [pid 13485] [client 84.120.210.249:50394] PHP 致命错误:未捕获的 TypeError:Symfony\Component\Dotenv\Dotenv::populate 的返回值() 必须是 Symfony\Component\Dotenv\void 的实例,在 /var/www/my_project/vendor/symfony/dotenv/Dotenv.php:95\n 堆栈跟踪中没有返回:\n#0 /var/www/my_project /vendor/symfony/dotenv/Dotenv.php(57): Symfony\Component\Dotenv\Dotenv->populate(Array)\n#1 /var/www/my_project/public/index.php(15): Symfony\Component \Dotenv\Dotenv->load('/var/www/rodage...')\n#2 {main}\n 在第 95 行抛出 /var/www/my_project/vendor/symfony/dotenv/Dotenv.php

这是我的 index.php(创建项目时得到的默认 index.php):

<?php

use App\Kernel;
use Symfony\Component\Debug\Debug;
use Symfony\Component\Dotenv\Dotenv;
use Symfony\Component\HttpFoundation\Request;

require __DIR__.'/../vendor/autoload.php';

// The check is to ensure we don't use .env in production
if (!isset($_SERVER['APP_ENV'])) {
    if (!class_exists(Dotenv::class)) {
        throw new \RuntimeException('APP_ENV environment variable is not defined. You need to define environment variables for configuration or add "symfony/dotenv" as a Composer dependency to load variables from a .env file.');
    }
    (new Dotenv())->load(__DIR__.'/../.env');
}

if ($_SERVER['APP_DEBUG'] ?? ('prod' !== ($_SERVER['APP_ENV'] ?? 'dev'))) {
    umask(0000);

    Debug::enable();
}

if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? false) {
    Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST);
}

if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? false) {
    Request::setTrustedHosts(explode(',', $trustedHosts));
}

$kernel = new Kernel($_SERVER['APP_ENV'] ?? 'dev', $_SERVER['APP_DEBUG'] ?? ('prod' !== ($_SERVER['APP_ENV'] ?? 'dev')));
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

这就是我在 composer.json 中的内容:

"require": {
    "php": "^7.1.3",
    "symfony/asset": "^4.0",
    "symfony/console": "^4.0",
    "symfony/dotenv": "^4.0",
    "symfony/flex": "^1.0",
    "symfony/framework-bundle": "^4.0",
    "symfony/lts": "^4@dev",
    "symfony/twig-bundle": "^4.0",
    "symfony/web-server-bundle": "^4.0",
    "symfony/yaml": "^4.0"
},

这些是我尝试过的:

-缓存:清除

-作曲家更新

-apache重启

我认为这与环境变量有关,但不太确定...

有什么建议吗?

感谢大家的宝贵时间!

【问题讨论】:

    标签: production-environment symfony4


    【解决方案1】:

    无效退货仅适用于 PHP 7.1。我的猜测是您使用的是早期版本的 PHP。

    Look at this answer

    【讨论】:

    • php -v: PHP 7.1.12-1+ubuntu16.04.1+deb.sury.org+1 (cli) (build: Nov 29 2017 10:03:25) (NTS) 编辑后我的composer.json和dotenv 3.4我遇到了一个新错误...... PHP致命错误:类类型参数的默认值只能在/var/www/my_project/vendor/symfony/config/ResourceCheckerConfigCache.php中为NULL这种错误毫无意义。在 localhost 我的应用程序运行完美
    猜你喜欢
    • 1970-01-01
    • 2018-06-24
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 2018-09-14
    • 1970-01-01
    • 2021-10-08
    相关资源
    最近更新 更多