Mark Drew (he/him)
06/07/2022, 8:33 PMscripts:onServerStart
But doing the following to debug and see exactly when they are triggered doesnt seem to do any output:
"scripts":{
"preServerStart":"echo '---------preServerStart'",
"onServerStart":"echo '---------onServerStart'",
"onServerInstall":"echo '---------onServerInstall'",
"onServerStop":"echo '---------onServerStop'",
"preServerForget":"echo '---------preServerForget'",
"postServerForget":"echo '---------postServerForget'"
}
When I do server start --debug
bdw429s
06/07/2022, 8:43 PMbox.json
or your server.json
?bdw429s
06/07/2022, 8:43 PMserver.json
• allow a file glob which could match multiple filesMark Drew (he/him)
06/07/2022, 8:44 PMbdw429s
06/07/2022, 8:44 PMMark Drew (he/him)
06/07/2022, 8:44 PMbdw429s
06/07/2022, 8:44 PMMark Drew (he/him)
06/07/2022, 8:44 PM• allow a comma-delimited list of files in theserver.json
• allow a file glob which could match multiple filesI like either or both of those options!
bdw429s
06/07/2022, 8:45 PMonServerInstall
Mark Drew (he/him)
06/07/2022, 8:45 PMMark Drew (he/him)
06/07/2022, 8:46 PMbdw429s
06/07/2022, 8:46 PMbdw429s
06/07/2022, 8:46 PMMark Drew (he/him)
06/07/2022, 8:47 PMbdw429s
06/07/2022, 8:47 PMbdw429s
06/07/2022, 8:47 PMbdw429s
06/07/2022, 8:48 PMMark Drew (he/him)
06/07/2022, 8:48 PMbdw429s
06/07/2022, 8:48 PMif( serverJSON.keyExists( 'web' ) && serverJSON.web.keyExists( 'rules' ) ) {
if( !isArray( serverJSON.web.rules ) ) {
throw( message="'rules' key in your server.json must be an array of strings.", type="commandException" );
}
serverInfo.webRules.append( serverJSON.web.rules, true);
}
if( serverJSON.keyExists( 'web' ) && serverJSON.web.keyExists( 'rulesFile' ) ) {
if( isSimpleValue( serverJSON.web.rulesFile ) ) {
serverJSON.web.rulesFile = serverJSON.web.rulesFile.listToArray();
}
serverInfo.webRules.append( serverJSON.web.rulesFile.reduce((predicates,fg)=>{
fg = fileSystemUtil.resolvePath( fg, defaultServerConfigFileDirectory );
return predicates.append( wirebox.getInstance( 'Globber' ).setPattern( fg ).matches().reduce( (predicates,file)=>{
if( lCase( file ).endsWith( '.json' ) ) {
return predicates.append( deserializeJSON( fileRead( file ) ), true );
} else {
return predicates.append( fileRead( file ).listToArray( chr(13)&chr(10) ), true );
}
}, [] ), true );
}, []), true );
}
if( defaults.keyExists( 'web' ) && defaults.web.keyExists( 'rules' ) ) {
serverInfo.webRules.append( defaults.web.rules, true);
}
if( defaults.keyExists( 'web' ) && defaults.web.keyExists( 'rulesFile' ) ) {
var defaultsRulesFile = defaults.web.rulesFile;
if( isSimpleValue( defaultsRulesFile ) ) {
defaultsRulesFile = defaultsRulesFile.listToArray();
}
serverInfo.webRules.append( defaultsRulesFile.reduce((predicates,fg)=>{
fg = fileSystemUtil.resolvePath( fg, defaultwebroot );
return predicates.append( wirebox.getInstance( 'Globber' ).setPattern( fg ).matches().reduce( (predicates,file)=>{
if( lCase( file ).endsWith( '.json' ) ) {
return predicates.append( deserializeJSON( fileRead( file ) ), true );
} else {
return predicates.append( fileRead( file ).listToArray( chr(13)&chr(10) ), true );
}
}, [] ), true );
}, []), true);
}
☝️ All that just to allow for a server.json or server defaults list of file globbing patternsMark Drew (he/him)
06/07/2022, 8:48 PMbdw429s
06/07/2022, 8:49 PMbdw429s
06/07/2022, 8:49 PMbdw429s
06/07/2022, 8:50 PMMark Drew (he/him)
06/07/2022, 8:51 PMMark Drew (he/him)
06/07/2022, 8:52 PM${DB_USERNAME}
for example but for this environment we need a different datasource all together.bdw429s
06/07/2022, 8:52 PMcfconfigfile
cfconfigserver
env vars and set both
cfconfigFile
cfconfig.file
in the server.json
and basically get 4 files imported right there!Mark Drew (he/him)
06/07/2022, 8:52 PMbdw429s
06/07/2022, 8:54 PMcfconfigweb
env var and use cfconfig.web
in your server.json
and the would both get loadedMark Drew (he/him)
06/07/2022, 8:54 PMMark Drew (he/him)
06/07/2022, 8:54 PMbdw429s
06/07/2022, 8:54 PMMark Drew (he/him)
06/07/2022, 8:54 PMbdw429s
06/07/2022, 8:55 PMMark Drew (he/him)
06/07/2022, 8:55 PMbdw429s
06/07/2022, 8:55 PMcfconfig datasource remove
command, but the issue would be getting it to run at the right time (after the cfconfig imports, not before)Mark Drew (he/him)
06/07/2022, 8:56 PMMark Drew (he/him)
06/07/2022, 8:56 PMbdw429s
06/07/2022, 8:56 PMSo cfconfigweb loaded first and then cfconfig.web ?Um, that's not necessarily a documented behavior, but glancing at the code, it seems we check env vars prior to JSON files.
bdw429s
06/07/2022, 8:57 PMbdw429s
06/07/2022, 8:58 PMMark Drew (he/him)
06/07/2022, 8:58 PMbdw429s
06/07/2022, 8:58 PMbdw429s
06/07/2022, 8:59 PMMark Drew (he/him)
06/07/2022, 8:59 PMMark Drew (he/him)
06/07/2022, 8:59 PMMark Drew (he/him)
06/07/2022, 8:59 PMbdw429s
06/07/2022, 9:00 PMMark Drew (he/him)
06/07/2022, 9:00 PMbdw429s
06/07/2022, 9:00 PMMark Drew (he/him)
06/07/2022, 9:00 PMbdw429s
06/07/2022, 9:01 PMMark Drew (he/him)
06/07/2022, 9:03 PMbdw429s
06/07/2022, 9:04 PMbdw429s
06/07/2022, 9:04 PMMark Drew (he/him)
06/07/2022, 9:05 PMMark Drew (he/him)
06/07/2022, 9:05 PMbdw429s
06/07/2022, 9:12 PM"password":"${DB_PASSWORD}",
"class":"${DB_CLASS}",
"dbdriver":"${DB_DBDRIVER}",
etc...
Then provide the proper env vars in each environment.
The second option is to override the individual bits with env vars like so:
cfconfig_datasources_bob_password=myPass
cfconfig_datasources_bob_class=my.class
cfconfig_datasources_bob_dbdriver=MySQL
etc...
The third option is the same as above, but do it with one big env var that simply contains JSON
cfconfig_datasources_bob={"password":"myPass","class=":"my.class","dbdriver":"MySQL",etc..}
escaping as necessary based on how/where you set thatbdw429s
06/07/2022, 9:13 PMMark Drew (he/him)
06/07/2022, 9:14 PMMark Drew (he/him)
06/07/2022, 9:14 PMMark Drew (he/him)
06/07/2022, 9:14 PMbdw429s
06/07/2022, 9:14 PMMark Drew (he/him)
06/07/2022, 9:15 PMMark Drew (he/him)
06/07/2022, 9:16 PMMark Drew (he/him)
06/07/2022, 9:18 PMcfvonner
06/07/2022, 11:54 PMMark Drew (he/him)
06/08/2022, 7:16 AMMark Drew (he/him)
06/08/2022, 7:16 AM