mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-10 00:42:41 +01:00
Improve error messages for PHABRICATOR_ENV
Summary: - Allow user to specify "myconf" (recommended) or "myconf.conf.php" (less surprising). - Make sure syntax errors and other problems are surfaced. - If the configuration value isn't valid, give them a list of all valid values. Test Plan: - Added a syntax error, got a useful error. - Set PHABRICATOR_ENV to a silly value, got a list of valid values. - Set PHABRICATOR_ENV to have .conf.php suffix, site still worked. Reviewed By: kevinwallace Reviewers: kevinwallace, codeblock, aran, jungejason, tuomaspelkonen CC: aran, epriestley, kevinwallace Differential Revision: 381
This commit is contained in:
parent
74a2953ffd
commit
7aa3582120
2 changed files with 41 additions and 5 deletions
|
@ -16,11 +16,47 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function phabricator_read_config_file($config) {
|
function phabricator_read_config_file($original_config) {
|
||||||
|
|
||||||
$root = dirname(dirname(__FILE__));
|
$root = dirname(dirname(__FILE__));
|
||||||
$conf = include $root.'/conf/'.$config.'.conf.php';
|
|
||||||
|
// Accept either "myconfig" (preferred) or "myconfig.conf.php".
|
||||||
|
$config = preg_replace('/\.conf\.php$/', '', $original_config);
|
||||||
|
$full_config_path = $root.'/conf/'.$config.'.conf.php';
|
||||||
|
|
||||||
|
// Make sure config file errors are reported.
|
||||||
|
$old_error_level = error_reporting(E_ALL | E_STRICT);
|
||||||
|
$old_display_errors = ini_get('display_errors');
|
||||||
|
ini_set('display_errors', 1);
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
$conf = include $full_config_path;
|
||||||
|
$errors = ob_get_clean();
|
||||||
|
|
||||||
|
error_reporting($old_error_level);
|
||||||
|
ini_set('display_errors', $old_display_errors);
|
||||||
|
|
||||||
if ($conf === false) {
|
if ($conf === false) {
|
||||||
throw new Exception("Failed to read config file '{$config}'.");
|
if (!Filesystem::pathExists($full_config_path)) {
|
||||||
|
$files = id(new FileFinder($root.'/conf/'))
|
||||||
|
->withType('f')
|
||||||
|
->withSuffix('conf.php')
|
||||||
|
->withFollowSymlinks(true)
|
||||||
|
->find();
|
||||||
|
|
||||||
|
foreach ($files as $key => $file) {
|
||||||
|
$file = trim($file, './');
|
||||||
|
$files[$key] = preg_replace('/\.conf\.php$/', '', $file);
|
||||||
|
}
|
||||||
|
$files = " ".implode("\n ", $files);
|
||||||
|
|
||||||
|
throw new Exception(
|
||||||
|
"CONFIGURATION ERROR\n".
|
||||||
|
"Config file '{$original_config}' does not exist. Valid config files ".
|
||||||
|
"are:\n\n".$files);
|
||||||
|
}
|
||||||
|
throw new Exception("Failed to read config file '{$config}': {$errors}");
|
||||||
}
|
}
|
||||||
|
|
||||||
return $conf;
|
return $conf;
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,11 +55,11 @@ if (get_magic_quotes_gpc()) {
|
||||||
require_once dirname(dirname(__FILE__)).'/conf/__init_conf__.php';
|
require_once dirname(dirname(__FILE__)).'/conf/__init_conf__.php';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
setup_aphront_basics();
|
||||||
|
|
||||||
$conf = phabricator_read_config_file($env);
|
$conf = phabricator_read_config_file($env);
|
||||||
$conf['phabricator.env'] = $env;
|
$conf['phabricator.env'] = $env;
|
||||||
|
|
||||||
setup_aphront_basics();
|
|
||||||
|
|
||||||
phutil_require_module('phabricator', 'infrastructure/env');
|
phutil_require_module('phabricator', 'infrastructure/env');
|
||||||
PhabricatorEnv::setEnvConfig($conf);
|
PhabricatorEnv::setEnvConfig($conf);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue