Laravel 5 – Обнаружение окружающей среды

Я понимаю, что с Laravel 5 он использует файлы .env, поэтому мы можем установить определенные значения переменной.

Мой вопрос в том, есть ли способ в Laravel 5, например, сказать,

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

И из этого он использует производственные ценности. Я думаю, что я бы хотел, чтобы все среды и их переменные размещались в одном файле или каталоге, или что бы мы ни делали, чтобы мы могли развернуть всю сборку без ручного вмешательства, и мы можем проверить все это в нашем репозитории кода.

    Laravel 5 сделал это немного сложнее, чем раньше, но вот способ сделать это. Все, что вам нужно будет сделать после этого, изменит значение вашего .env файла, и среда изменится

    Чтобы сделать это, выполните следующие действия

    1. Посмотрите на свой локальный .env установленный Laravel, и измените его содержимое на локальное или производственное или все, что вам нужно

    2. Создайте 2 файла .local.env и .production.env

    3. Добавить значение среды по умолчанию:

      • В .local.env : APP_ENV=local
      • В .production.env : APP_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/

    Вероятно, вы можете установить .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// IP address DB_DATABASE2=admin DB_USERNAME2=admin DB_PASSWORD2=admin 

    Затем в файле database.php в папке config вы можете настроить соединения Host и Host2, чтобы они соответствовали значениям localhost и production.

    У меня это как для 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);