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 | 1313
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.neonby 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.neonnaconfig.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 | 1313
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 | 822
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)