Я понимаю, что с Laravel 5 он использует файлы .env, поэтому мы можем установить определенные значения переменной.
Мой вопрос в том, есть ли способ в Laravel 5, например, сказать,
if ($SERVER_NAME == "my_production_server") { $environment = "production" }
И из этого он использует производственные ценности. Я думаю, что я бы хотел, чтобы все среды и их переменные размещались в одном файле или каталоге, или что бы мы ни делали, чтобы мы могли развернуть всю сборку без ручного вмешательства, и мы можем проверить все это в нашем репозитории кода.
Laravel 5 сделал это немного сложнее, чем раньше, но вот способ сделать это. Все, что вам нужно будет сделать после этого, изменит значение вашего .env
файла, и среда изменится
Чтобы сделать это, выполните следующие действия
Посмотрите на свой локальный .env
установленный Laravel, и измените его содержимое на локальное или производственное или все, что вам нужно
Создайте 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/app.php
.
require __DIR__.'/environment.php';
Ура! Все готово.
ПРИМЕЧАНИЕ. Если Laravel не может найти файл .env
он автоматически использует .production.env
что делает его удивительным для развертывания
Вероятно, вы можете установить .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);