Jump to content

TIP: Use of multiple instances with useFunctionsAPI enabled in all sites


horst
 Share

Recommended Posts

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
]);

image.png.bcc30ea8d1daeebaac8d44a15ad715fa.png

Spoiler

<?php namespace ProcessWire;
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/');

// bootstrap ProcessWire instance site2  (3.0.162)
require_once(PW_SITE2_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
]);

 

image.png.f91fef3fb61f0983c966021674f48009.png

Spoiler

<?php namespace ProcessWire;
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 instance site3  (3.0.152)
require_once(PW_SITE3_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
]);

 

image.png.305c005074af57a546a59c23cebea6e5.png

 

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
]);

image.png.92270ad8c6be5a8820ecd932ba1ffa66.png

 

  • Like 13
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...