Laravel 5 - 按服务器名称进行环境检测
Laravel 5 - Environment Detection by Server Name
我了解 Laravel 5,它使用 .env 文件,因此我们可以设置特定的环境值。
我的问题是,在 Laravel 5 中有没有办法,例如,
if ($SERVER_NAME == "my_production_server") {
$environment = "production"
}
并从中使用生产价值。我的想法是,我希望所有环境及其变量都放在一个文件或目录中,或者其他任何地方,这样我们就可以在没有任何人工干预的情况下部署整个构建,并且我们可以将它们全部检查到我们的代码存储库中。
您可以将 .env 设置为:
APP_ENV=local
APP_DEBUG=true
APP_KEY=sjkanljksdnjsnetcetcetcetc..
APP_URL=http://localhost:8000
DB_HOST=qa
DB_DATABASE=admin
DB_USERNAME=home
DB_PASSWORD=root
DB_HOST2=production// I.P address
DB_DATABASE2=admin
DB_USERNAME2=admin
DB_PASSWORD2=admin
然后在 config 文件夹的 database.php 文件中,您可以设置连接 Host 和 Host2 以匹配本地主机和生产值。
Laravel 5 使这比以前更难一些,但这是实现它的方法。
在此之后,您需要做的就是更改 .env
文件的值,环境将会改变
操作步骤如下
查看由 Laravel 安装的本地 .env
并将其内容更改为 local 或 production 或任何你需要的东西
创建 2 个文件 .local.env
和 .production.env
添加默认环境值:
- 在
.local.env
中:APP_ENV=local
- 在
.production.env
中:APP_ENV=production
创建新的 php 文件并将其命名为 environment.php
,将其保存到此文件夹中:app/bootstrap/environment.php
$env = $app->detectEnvironment(function(){
$environmentPath = __DIR__.'/../.env';
$setEnv = trim(file_get_contents($environmentPath));
if (file_exists($environmentPath)){
putenv("APP_ENV=$setEnv");
if (getenv('APP_ENV') && file_exists(__DIR__.'/../.' .getenv('APP_ENV') .'.env')) {
Dotenv::load(__DIR__ . '/../', '.' . getenv('APP_ENV') . '.env');
}
}
});
将您的 environment.php
文件包含在 bootstrap 文件中。将其粘贴到您的 bootstrap/app.php
文件中。
require __DIR__.'/environment.php';
耶!你完成了。
注意: 如果 Laravel 找不到 .env
文件,它会自动使用 .production.env
,这使得它非常适合部署
我有这样的 Laravel 5.0。我遵循了 cjds 指南,但更改了我的规范代码。它不需要 .env 文件。
$env = $app->detectEnvironment(function() {
if (php_sapi_name() === 'cli') {
if (strpos(getcwd(), 'production') !== false) {
return 'production';
} elseif (strpos(getcwd(), 'staging') !== false) {
return 'staging';
} elseif ((strpos(getcwd(), 'xampp') !== false) || (strpos(getcwd(), 'lampp') !== false)) {
return 'development';
} else {
return 'production';
}
}
$absoluteLink = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
if (strpos($absoluteLink, 'production') !== false) {
return 'production';
} elseif (strpos($absoluteLink, 'staging') !== false) {
return 'staging';
} elseif (strpos($absoluteLink, '.dev') !== false || strpos($absoluteLink, 'local') !== false || strpos($absoluteLink, '192.168') !== false) {
return 'development';
} else {
return 'production';
}
});
putenv("APP_ENV=" . $env);
我了解 Laravel 5,它使用 .env 文件,因此我们可以设置特定的环境值。
我的问题是,在 Laravel 5 中有没有办法,例如,
if ($SERVER_NAME == "my_production_server") {
$environment = "production"
}
并从中使用生产价值。我的想法是,我希望所有环境及其变量都放在一个文件或目录中,或者其他任何地方,这样我们就可以在没有任何人工干预的情况下部署整个构建,并且我们可以将它们全部检查到我们的代码存储库中。
您可以将 .env 设置为:
APP_ENV=local
APP_DEBUG=true
APP_KEY=sjkanljksdnjsnetcetcetcetc..
APP_URL=http://localhost:8000
DB_HOST=qa
DB_DATABASE=admin
DB_USERNAME=home
DB_PASSWORD=root
DB_HOST2=production// I.P address
DB_DATABASE2=admin
DB_USERNAME2=admin
DB_PASSWORD2=admin
然后在 config 文件夹的 database.php 文件中,您可以设置连接 Host 和 Host2 以匹配本地主机和生产值。
Laravel 5 使这比以前更难一些,但这是实现它的方法。
在此之后,您需要做的就是更改 .env
文件的值,环境将会改变
操作步骤如下
查看由 Laravel 安装的本地
.env
并将其内容更改为 local 或 production 或任何你需要的东西创建 2 个文件
.local.env
和.production.env
添加默认环境值:
- 在
.local.env
中:APP_ENV=local
- 在
.production.env
中:APP_ENV=production
- 在
创建新的 php 文件并将其命名为
environment.php
,将其保存到此文件夹中:app/bootstrap/environment.php
$env = $app->detectEnvironment(function(){ $environmentPath = __DIR__.'/../.env'; $setEnv = trim(file_get_contents($environmentPath)); if (file_exists($environmentPath)){ putenv("APP_ENV=$setEnv"); if (getenv('APP_ENV') && file_exists(__DIR__.'/../.' .getenv('APP_ENV') .'.env')) { Dotenv::load(__DIR__ . '/../', '.' . getenv('APP_ENV') . '.env'); } } });
将您的
environment.php
文件包含在 bootstrap 文件中。将其粘贴到您的bootstrap/app.php
文件中。require __DIR__.'/environment.php';
耶!你完成了。
注意: 如果 Laravel 找不到 .env
文件,它会自动使用 .production.env
,这使得它非常适合部署
我有这样的 Laravel 5.0。我遵循了 cjds 指南,但更改了我的规范代码。它不需要 .env 文件。
$env = $app->detectEnvironment(function() {
if (php_sapi_name() === 'cli') {
if (strpos(getcwd(), 'production') !== false) {
return 'production';
} elseif (strpos(getcwd(), 'staging') !== false) {
return 'staging';
} elseif ((strpos(getcwd(), 'xampp') !== false) || (strpos(getcwd(), 'lampp') !== false)) {
return 'development';
} else {
return 'production';
}
}
$absoluteLink = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
if (strpos($absoluteLink, 'production') !== false) {
return 'production';
} elseif (strpos($absoluteLink, 'staging') !== false) {
return 'staging';
} elseif (strpos($absoluteLink, '.dev') !== false || strpos($absoluteLink, 'local') !== false || strpos($absoluteLink, '192.168') !== false) {
return 'development';
} else {
return 'production';
}
});
putenv("APP_ENV=" . $env);