Detekce běhu prostředí v konzoli
- RePRO
- Člen | 32
Ahoj,
omlouvám se předem za tuto obecnou otázku, protože se netýká až tolik
Nette, jako konfigurace, či konzole. Nicméně mě zajímá, jaký k tomu
máte názor, případně jak to řešíte. V samotném souboru
bootstrap.php
jsme kdysi dávno používali:
if (strpos($_SERVER['HTTP_HOST'], 'localhost') !== false) {
$configurator->addConfig(__DIR__ . '/config/cnf.local.neon');
}
else {
$configurator->addConfig(__DIR__ . '/config/cnf.production.neon');
}
Naprosto v pohodě zdrojový úryvek do té doby, než jsme začali používat konzoli, přes kterou spouštíme některé automatické úlohy, typicky – crony.
Od té doby máme v bootstrapu na produkci natvrdo jeden řádek. A proč?
Protože konzole zavolá na produkci cnf.local.neon
.
$configurator->addConfig(__DIR__ . '/config/cnf.production.neon');
Otázka tedy zní, jakým způsobem rozlišit, zda jsem lokálně či na produkci v konzoli?
Nutno poznamenat, že jsme si zkoušeli v konzoli vypsat, co je například
v globální proměnné $_SERVER
. Nic… žádné jméno serveru,
nic takového. Možná špatně nastavený server?
Mě třeba osobně napadlo si na ten server zapsat proměnnou, kterou bychom
poté měli v poli $GLOBALS
. Jenže víte jak, kolikrát nemáte
ani plný přístup na server, jako je root a podobně. Přenositelnost takové
aplikace je potom na prd. Ještě poznamenám, že momentálně využíváme
konzoli contributte/console
.
Nedá se třeba něco speciálně nastavit v samotné konfiguraci té konzole?
A ještě jedna věc, k deploy – pouštíte na produkční server i ten lokální soubor?
Předem díky za konstruktivní poznatky.
Editoval RePRO (28. 4. 2021 18:23)
- Marek Bartoš
- Nette Blogger | 1274
Konzoli rozlišíš pomocí if(PHP_SAPI === 'cli'){}
Ifování různých serverů (lokální, staging, produkce, PR #46468) však
není dobrý nápad – spousta podmínek, které boostrap komplikují a
v každém prostředí je vše až na jednu branch dead code.
config.local.neon
by měl představovat config aktuálního serveru
a bootstrap vždy includuje právě ten. Docílit toho lze tak, že při
deployi, před nahráním souborů na server přejmenuješ
config.production.neon
na config.local.neon
. Ze všech
configů specifických pro různé servery nahraješ jen ten.
Nutno poznamenat, že jsme si zkoušeli v konzoli vypsat, co je například v globální proměnné $_SERVER. Nic… žádné jméno serveru, nic takového. Možná špatně nastavený server?
Konzole o webovém serveru nic neví, netvoří http request. Nic specifické pro http tedy v $_SERVER nenajdeš.
Editoval Mabar (28. 4. 2021 18:33)
- RePRO
- Člen | 32
Mabar napsal(a):
Konzoli rozlišíš pomocí
if(PHP_SAPI === 'cli'){}
Ifování různých serverů (lokální, staging, produkce, PR #46468) však není dobrý nápad – spousta podmínek, které boostrap komplikují a v každém prostředí je vše až na jednu branch dead code.
config.local.neon
by měl představovat config aktuálního serveru a bootstrap vždy includuje právě ten. Docílit toho lze tak, že při deployi, před nahráním souborů na server přejmenuješconfig.production.neon
naconfig.local.neon
. Ze všech configů specifických pro různé servery nahraješ jen ten.Nutno poznamenat, že jsme si zkoušeli v konzoli vypsat, co je například v globální proměnné $_SERVER. Nic… žádné jméno serveru, nic takového. Možná špatně nastavený server?
Konzole o webovém serveru nic neví, netvoří http request. Nic specifické pro http tedy v $_SERVER nenajdeš.
Díky za poznatek.
Konzoli rozlišíš pomocí if (PHP_SAPI === 'cli') {}
Ano, ale to nám pouze říká, jestli je to spuštěno z konzole, či nikoliv. Rozlišení toho ifu nikoliv. Takže zůstaneme u toho jednoho souboru na serveru. :-) Zkrátka to není možné „hezky“ přes konzoli detekovat.
Editoval RePRO (28. 4. 2021 18:39)
- Marek Bartoš
- Nette Blogger | 1274
Konzoli rozlišíš pomocí if (PHP_SAPI === ‚cli‘) {}
To jsem psal pro případ, že bys chtěl nějakou konfiguraci při běhu v konzoli mít jinak, ne kvůli rozlišení serveru
- ViPEr*CZ*
- Člen | 817
Pokud se nepletu, tak Symfony/Console to dělá přes přepínač. Tj. je tam
nějaký default a přes --env=development
můžete říci, že to
běží v development environmentu. Tj. bude to chtít zavést něco obdobného
zde a chytit si to v bootstrapu pro rozlišení toho, jaký config chcete
loadovat.
Editoval ViPEr*CZ* (29. 4. 2021 10:56)