Forum OpenACS Q&A: Re: Multiple OpenACS instances in one configuration file
Posted by
Gustaf Neumann
on 04/18/19 08:11 PM
Dear Ann,
I've put together a configuration file for loading two OpenACS instances concurrently (see below)..... and I was able to reproduce the problem you are reporting. The actual problem was located in the PostgreSQL driver "nsdbpg", which defined its specific Tcl commands only when it was loaded the first time.
Please get a fresh version of the nsdbpg modules from bitbucket, recompile and install it, and it will work.
all the best -g
######################################################################
#
# Demo config file for loading two OpenACS instances into one
# NaviServer process. These servers are named "s1" and "s2" below.
#
# This configuration is in no way tuned, so don't use this in your
# production environment.
#
# Since the two servers are distinguished via virtual hosting, Define
# in your etc/hosts file a localhost entry like (names used below):
#
# 127.0.0.1 localhost localhost1 localhost2
#
######################################################################
set address 127.0.0.1 ;# listen on loopback via IPv4
set httpport 8100
set s1_hostname localhost1
set s2_hostname localhost2
set s1_serverroot /usr/local/oacs-5-10/openacs-4/
set s2_serverroot /usr/local/oacs-5-9/openacs-4/
set homedir [file dirname [ns_info config]]
set bindir [file dirname [ns_info nsd]]
set s1_db_name "oacs-head"
set s2_db_name "oacs-5-9"
set db_host localhost
set db_port ""
set db_user nsadmin
#---------------------------------------------------------------------
# Set environment variables HOME and LANG. HOME is needed since
# otherwise some programs called via exec might try to write into the
# root home directory.
#
set env(HOME) $homedir
set env(LANG) en_US.UTF-8
#---------------------------------------------------------------------
# Global server parameters
#---------------------------------------------------------------------
ns_section ns/parameters {
ns_param serverlog $s1_serverroot/log/error.log
ns_param pidfile $s1_serverroot/log/nsd.pid
ns_param home $homedir
}
#---------------------------------------------------------------------
# Definition of NaviServer servers
#---------------------------------------------------------------------
ns_section ns/servers {
ns_param s1 "Server 1"
ns_param s2 "Server 2"
}
#---------------------------------------------------------------------
# Global driver modules
#---------------------------------------------------------------------
ns_section "ns/modules" {
ns_param nssock ${bindir}/nssock
}
#---------------------------------------------------------------------
# Configuration for plain HTTP interface -- module nssock
#---------------------------------------------------------------------
ns_section ns/module/nssock {
ns_param defaultserver s1
ns_param address $address
ns_param port $httpport
}
#
# Define, which "host" (as supplied by the "host:" header
# field) accepted over this driver should be associated with
# which server.
#
ns_section ns/module/nssock/servers {
ns_param s1 localhost
ns_param s1 $s1_hostname
ns_param s2 $s2_hostname
}
ns_section ns/threads {
ns_param stacksize 1MB
}
#---------------------------------------------------------------------
# Database drivers
#---------------------------------------------------------------------
ns_section "ns/db/drivers" {
ns_param postgres ${bindir}/nsdbpg
}
#---------------------------------------------------------------------
# Server-level configuration
#
#---------------------------------------------------------------------
# Server s1
#---------------------------------------------------------------------
ns_section ns/server/s1 {
ns_param minthreads 2 ;# 1; minimal number of connection threads
ns_param connsperthread 1000 ;# 10000; number of connections (requests) handled per thread
}
ns_section ns/server/s1/redirects {
ns_param 404 /shared/404
ns_param 403 /shared/403
ns_param 503 /shared/503
ns_param 500 /shared/500
}
ns_section ns/server/s1/tcl {
ns_param library $s1_serverroot/tcl
}
ns_section "ns/server/s1/fastpath" {
ns_param serverdir $homedir
ns_param pagedir $s1_serverroot/www
}
ns_section ns/server/s1/module/nslog {
ns_param file $s1_serverroot/log/access.log
}
ns_section ns/server/s1/modules {
ns_param nslog nslog
ns_param nsdb nsdb
ns_param nsproxy nsproxy
set libthread [lindex [lsort [glob -nocomplain $homedir/lib/thread*/libthread*[info sharedlibextension]]] end]
ns_param libthread $libthread
}
#
# DB setup
#
ns_section ns/db/pools {
ns_param s1_pool1 "S1 Pool 1"
ns_param s1_pool2 "S1 Pool 2"
ns_param s1_pool3 "S1 Pool 3"
}
ns_section ns/server/s1/db {
ns_param pools s1_pool1,s1_pool2,s1_pool3
ns_param defaultpool s1_pool1
}
ns_section ns/db/pool/s1_pool1 {
ns_param connections 15
ns_param driver postgres
ns_param datasource ${db_host}:${db_port}:dbname=${s1_db_name}
ns_param user $db_user
}
ns_section ns/db/pool/s1_pool2 {
ns_param connections 5
ns_param driver postgres
ns_param datasource ${db_host}:${db_port}:dbname=${s1_db_name}
ns_param user $db_user
}
ns_section ns/db/pool/s1_pool3 {
ns_param connections 2
ns_param driver postgres
ns_param datasource ${db_host}:${db_port}:dbname=${s1_db_name}
ns_param user $db_user
}
#---------------------------------------------------------------------
# Server s2
#---------------------------------------------------------------------
ns_section ns/server/s2 {
ns_param minthreads 2 ;# 1; minimal number of connection threads
ns_param connsperthread 1000 ;# 10000; number of connections (requests) handled per thread
}
ns_section ns/server/s2/redirects {
ns_param 404 /shared/404
ns_param 403 /shared/403
ns_param 503 /shared/503
ns_param 500 /shared/500
}
ns_section ns/server/s2/tcl {
ns_param library $s2_serverroot/tcl
}
ns_section "ns/server/s2/fastpath" {
ns_param serverdir $homedir
ns_param pagedir $s2_serverroot/www
}
ns_section ns/server/s2/module/nslog {
ns_param file $s2_serverroot/log/access.log
}
ns_section ns/server/s2/modules {
ns_param nslog nslog
ns_param nsdb nsdb
ns_param nsproxy nsproxy
set libthread [lindex [lsort [glob -nocomplain $homedir/lib/thread*/libthread*[info sharedlibextension]]] end]
ns_param libthread $libthread
}
#
# DB setup
#
ns_section ns/db/pools {
ns_param s2_pool1 "S2 Pool 1"
ns_param s2_pool2 "S2 Pool 2"
ns_param s2_pool3 "S2 Pool 3"
}
ns_section ns/server/s2/db {
ns_param pools s2_pool1,s2_pool2,s2_pool3
ns_param defaultpool s2_pool1
}
ns_section ns/db/pool/s2_pool1 {
ns_param connections 15
ns_param driver postgres
ns_param datasource ${db_host}:${db_port}:dbname=${s2_db_name}
ns_param user $db_user
}
ns_section ns/db/pool/s2_pool2 {
ns_param connections 5
ns_param driver postgres
ns_param datasource ${db_host}:${db_port}:dbname=${s2_db_name}
ns_param user $db_user
}
ns_section ns/db/pool/s2_pool3 {
ns_param connections 2
ns_param driver postgres
ns_param datasource ${db_host}:${db_port}:dbname=${s2_db_name}
ns_param user $db_user
}
#---------------------------------------------------------------------
ns_log notice "nsd.tcl: finished reading config file."