我们有三个开发服务器(dev1,dev2,stage)和一个生产服务器和一些symfony项目。
我们希望自动更改环境。目前,我的黑客代码在'public/index.php‘中是这样的。
use App\Kernel;
use Symfony\Component\Debug\Debug;
use Symfony\Component\Dotenv\Dotenv;
use Symfony\Component\HttpFoundation\Request;
require __DIR__.'/../vendor/autoload.php';
//----------- hack start ------------
$_SERVER['APP_ENV'] = 'prod';
$_SERVER['APP_DEBUG'] = 0;
$_SERVER['APP_SECRET'] = '67d829bf61dc5f87a73fd814e2c9f629';
$localIP = getHostByName(getHostName());
if ($localIP === '81.4.552.97') {
$_SERVER['APP_ENV'] = 'dev1';
$_SERVER['APP_DEBUG'] = 1;
$_SERVER['APP_SECRET'] = '67d829bf61dc5f87a73fd814e2c9f629';
}
...
//----------- hack end ------------
// The check is to ensure we don't use .env in production
if (!isset($_SERVER['APP_ENV'])) {
(new Dotenv())->load(__DIR__.'/../.env');
}
if ($_SERVER['APP_DEBUG'] ?? ('prod' !== ($_SERVER['APP_ENV'] ?? 'dev'))) {
umask(0000);
Debug::enable();
}
// Request::setTrustedProxies(['0.0.0.0/0'], Request::HEADER_FORWARDED);
$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);我在‘config/package/*’下有三个新的环境,包括数据库和电子邮件的配置。
这条路对吗?也许其他一些人也有这个问题。我刚刚在dev1下测试了它,它似乎正在运行。
发布于 2020-11-04 15:29:11
最简单的方法可能是由HTTP服务器设置环境。对于Apache,在.htaccess中:
SetEnvIf Remote_Addr 1\.2\.3\.4 APP_ENV=dev
SetEnvIf Remote_Addr 1\.2\.3\.4 APP_DEBUG=1其余部分在.env.dev中
发布于 2018-06-30 16:22:36
发布于 2018-07-01 15:29:29
目前,我认为最好的解决方案是删除dotenv composer remove symfony/apache-pack,并在public/index.php和bin/console中添加一个需求
use App\Kernel;
use Symfony\Component\Debug\Debug;
use Symfony\Component\Dotenv\Dotenv;
use Symfony\Component\HttpFoundation\Request;
require __DIR__.'/../env.php';
require __DIR__.'/../vendor/autoload.php';
// The check is to ensure we don't use .env in production
if (!isset($_SERVER['APP_ENV'])) {
(new Dotenv())->load(__DIR__.'/../.env');
}
...在这个env.php中,我可以声明环境的所有服务器变量
$_SERVER['APP_ENV'] = 'xxx';
$_SERVER['MAILER_URL'] = 'null://localhost';
$_SERVER['APP_SECRET'] = '425017d316ee2a08e54c6f2bfc59ff8d';
$_SERVER['DATABASE_URL'] = 'xxx';我认为这是一个又好又快的解决方案。(如果某天没有安装php,apache服务器将不会发送包含所有配置的文件;)
https://stackoverflow.com/questions/51112723
复制相似问题