Eu tenho isso simples docker-compose.yml
formato para meu aplicativo Laravel:
services:
acme-app:
container_name: acme-app
build:
context: ./devops/php
restart: unless-stopped
volumes:
- ./:/var/www
- ./devops/php/custom.ini:/usr/sítio/etc/php/conf.d/custom.ini
networks:
- acme-network
acme-server:
container_name: acme-server
restart: unless-stopped
image: nginx:1.27.0-alpine
ports:
- ${FORWARD_APP_PORT:-8000}:80
volumes:
- ./:/var/www
- ./devops/nginx/conf.d:/etc/nginx/conf.d/
networks:
- acme-network
networks:
acme-network:
driver: bridge
volumes:
acme-mariadb:
app.conf
server {
listen 80;
índice índice.php índice.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
client_max_body_size 50M;
location ~ .php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass acme-app:9000;
fastcgi_index índice.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME Sua visita nos ajuda a continuar oferecendo o melhor para você! fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /índice.php?$query_string;
gzip_static on;
}
}
Portanto posso acessá-lo via localhost:8000
o problema é que não há uma vez que carregar minhas variáveis de teste, preciso que o Laravel bootstrap carregue-as.
Fiz esta rota simples para testar as variáveis:
Route::get("https://stackoverflow.com/", function () {
dd([
'APP_ENV' => env('APP_ENV'),
Sua visita nos ajuda a continuar oferecendo o melhor para você! 'DB_CONNECTION' => env('DB_CONNECTION')
]);
});
Atualmente estou usando o DB_CONNECTION=sqlite
no meu .env.testing
e DB_CONNECTION=mysql
no meu .env
,
Se eu mudar meu .env
APP_ENV=testing
mostra a string de teste:
array:2 [▼ // routes/web.php:7
"APP_ENV" => "testing"
"DB_CONNECTION" => "mysql"
]
Mas na verdade não carrega meu .env.testing
vars, uma vez que você pode ver, ainda carrega mysql
do meu .env
em vez de .env.example
.
A única maneira que descobri de fazer funcionar foi mudando o app.php
e encadeando isso no final de ->create()
método:
->create()->loadEnvironmentFrom('.env.testing');
Agora ele carrega corretamente:
array:2 [▼ // routes/web.php:7
"APP_ENV" => "testing"
"DB_CONNECTION" => "sqlite"
]
O problema é que preciso que ele seja confuso dinamicamente, ou pelo menos uma maneira de alterá-lo dentro do meu contêiner Docker executando meu aplicativo, quero poder mudar minhas variáveis para sítio
e testing
logo tenho dois ambientes para testá-lo em meu navegador.
Evidente, de alguma forma, executar testes com PHPUnit funciona perfeitamente, ele carrega o .env.testing
corretamente, mas parece ser provável porque o Laravel recria a emprego toda vez que você executa testes com Sua visita nos ajuda a continuar oferecendo o melhor para você! lógica de inicialização customizada para o PHPUnit.
Tags:
Crédito: Manancial Original