1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-09-19 16:58:48 +02: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:
epriestley 2011-05-30 19:52:51 -07:00
parent 74a2953ffd
commit 7aa3582120
2 changed files with 41 additions and 5 deletions

View file

@ -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;
} }

View file

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