chyba pri prvotnom zostaveni SystemContainer ak sluzba vyzaduje nenainstalovane rozsirenie
- bazo
- Člen | 620
v config.neon mam zapisanu sluzbu, ktora vyzaduje zeroMq php extension.
zmqSocketPublisher:
class: \ZMQSocket(ZMQContext(), ::constant(ZMQ::SOCKET_REQ), 'events')
sluzba sa nikde nepouziva, nikde sa neinjectuje, nikam nie je predavana.
pri prvotnom zostaveni SystemContainer sa vyhodi vynimka
Nette\InvalidStateException
Class \ZMQSocket used in service ‚zmqSocketPublisher‘ has not been found or
is not instantiable.
ak extension deaktivujem po zostaveni, vsetko je ok.
v time nas je 7 ludi, nie je potrebne, aby kazdy instaloval zero mq a php extension, ked robi na nesuvisejucich veciach.
predpokladam, ze to robi nejaka kontrola pri zostavovani containeru.
da sa to nejako vypnut?
- Filip Procházka
- Moderator | 4668
Nedá se to vypnout. dá se to ovšem obejít.
Buďto si vytvoříš konfigurák čistě pro ZeroMq, nebo si pro něj
vytvoříš CompilerExtension
.
class ZeroMqExtension extends Nette\Config\CompilerExtension
{
public $defaults = array(
// .. vychozi hodnoty
);
public function loadConfiguration()
{
if (!extension_loaded('zeromq')) {
Nette\Diagnostics\Debugger::log('Extension ZeroMq is not enabled.', 'compile');
return;
}
$config = $this->getConfig($this->defaults);
$builder = $this->getContainerBuilder();
$builder->addDefinition($this->prefix('socketPublisher'))
->setClass('ZMQSocket', array(
new Nette\DI\Statement('ZMQContext'),
ZMQ::SOCKET_REQ,
'events'
));
}
}
Ale nepovažuji to za nejlepší možné řešení – takhle můžou vznikat WTF situace.
Nejlepší řešení by bylo, kdyby si všichni zeromq nainstalovali – není dobré vyvíjet „velkou“ aplikaci ve více lidech, když nemají všichni alespoň podobné prostředí.