I played around with multi-instances and found out that we currently (PW 3.0.163) are not able to use multiple instances when more then one site has set $config->useFunctionsAPI (in site/config.php) to true!
Then I saw that, (when $config->useFunctionsAPI was set to false) in all instances $config->version returned the same version, that from the master instance. So, first I was a bit confused, but then I thought that this may have to do with the early step when PW processes/build the $config. And indeed, if I set in all site/config.php files the $config->useFunctionsAPI to false, and then in all site/init.php files to true, everything is working fine. Now we can use our sites with the functions API, and we can load as many multiple instances in parallel we want. ?
TL;DR
site/init.php
/**
* FOR BETTER SUPPORT OF MULTIINSTANCES, WE ENABLE $config->useFunctionsAPI HERE,
* INSTEAD OF THE site/config.php FILE:
*/
$wire->config->useFunctionsAPI = true;
Bootstrapping three different instances, in first step each of them in a single environment:
<?php namespace ProcessWire;
if(!defined('PW_MASTER_PATH')) define('PW_MASTER_PATH', 'E:/laragon/www/hwm/');
if(!defined('PW_MASTER_HTTPURL')) define('PW_MASTER_HTTPURL', 'https://hwm.local/');
// bootstrap ProcessWire instance site1 (3.0.163)
require_once(PW_MASTER_PATH . 'index.php');
mvd([
'httpurl' => $wire->wire('pages')->get(1)->httpURL,
'instanceNum' => $wire->getInstanceNum(),
'config->version' => $wire->wire('config')->version,
'useFunctionsAPI' => $wire->wire('config')->useFunctionsAPI
]);
When running all three in a multi instance environment, they load fine, (no compile error), all with the use for the functions API enabled:
<?php namespace ProcessWire;
if(!defined('PW_MASTER_PATH')) define('PW_MASTER_PATH', 'E:/laragon/www/hwm/');
if(!defined('PW_MASTER_HTTPURL')) define('PW_MASTER_HTTPURL', 'https://hwm.local/');
if(!defined('PW_SITE2_PATH')) define('PW_SITE2_PATH', 'E:/laragon/www/hwm2/');
if(!defined('PW_SITE2_HTTPURL')) define('PW_SITE2_HTTPURL', 'https://hwm2.local/');
if(!defined('PW_SITE3_PATH')) define('PW_SITE3_PATH', 'E:/laragon/www/hwm3/');
if(!defined('PW_SITE3_HTTPURL')) define('PW_SITE3_HTTPURL', 'https://hwm3.local/');
// bootstrap ProcessWire master instance (3.0.163)
require_once(PW_MASTER_PATH . 'index.php');
mvd([
'httpurl' => $wire->wire('pages')->get(1)->httpURL,
'instanceNum' => $wire->getInstanceNum(),
'config->version' => $wire->wire('config')->version,
'useFunctionsAPI' => $wire->wire('config')->useFunctionsAPI
]);
// create a secondary instance from master (3.0.163)
$wire = new \ProcessWire\ProcessWire(PW_MASTER_PATH);
mvd([
'httpurl' => $wire->wire('pages')->get(1)->httpURL,
'instanceNum' => $wire->getInstanceNum(),
'config->version' => $wire->wire('config')->version,
'useFunctionsAPI' => $wire->wire('config')->useFunctionsAPI
]);
// create instance of a second site (3.0.162)
$site2 = new ProcessWire(PW_SITE2_PATH, PW_SITE2_HTTPURL);
mvd([
'httpurl' => $site2->wire('pages')->get(1)->httpURL,
'instanceNum' => $site2->getInstanceNum(),
'config->version' => $site2->wire('config')->version,
'useFunctionsAPI' => $site2->wire('config')->useFunctionsAPI
]);
// create instance of a third site (3.0.152)
$site3 = new ProcessWire(PW_SITE3_PATH, PW_SITE3_HTTPURL);
mvd([
'httpurl' => $site3->wire('pages')->get(1)->httpURL,
'instanceNum' => $site3->getInstanceNum(),
'config->version' => $site3->wire('config')->version,
'useFunctionsAPI' => $site3->wire('config')->useFunctionsAPI
]);