1

我了解 Laravel 5,它使用 .env 文件,因此我们可以设置特定的环境值。

我的问题是,在 Laravel 5 中有没有办法,例如,

if ($SERVER_NAME == "my_production_server") {
    $environment = "production"
}

并由此使用生产价值。我的想法是,我希望将所有环境及其变量放在一个文件或目录中,或者其他任何东西,这样我们就可以在没有任何手动干预的情况下部署整个构建,我们可以将这一切都检查到我们的代码存储库中。

4

3 回答 3

4

Laravel 5 比以前更难做到这一点,但这里是做这件事的方法。在此之后您需要做的就是更改.env文件的值,环境将会改变

执行此操作的步骤如下

  1. 查看.envLaravel 安装的本地内容,并将其内容更改为本地生产或您需要的任何其他内容

  2. 创建2个文件.local.env.production.env

  3. 添加默认环境值:

    • .local.envAPP_ENV=local
    • .production.envAPP_ENV=production
  4. 创建新的 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');
              } 
       }
    });
    
  5. 将您的environment.php文件包含在引导文件中。将其粘贴到您的bootstrap/app.php文件中。

    require __DIR__.'/environment.php';
    

耶!你完成了。

注意:如果 Laravel 找不到.env它会自动使用的文件,.production.env这对于部署来说非常棒

感谢http://developers.ph/laravel-framework/laravel-5/how-to-setup-multiple-environment-for-laravel-5-developers-way/

于 2015-06-26T21:46:32.563 回答
0

您可以将 .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 以匹配 localhost 和生产值。

于 2015-06-26T21:15:58.230 回答
0

对于 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);
于 2015-12-17T20:39:18.963 回答