Я успешно развернул приложение limesurvey.org (LAMP) в Pivotal Cloud. Приложение в основном работает как положено, за исключением того, что база данных MySQL не позволяет приложению создавать таблицы. Когда данный опрос активирован, приложение должно создавать таблицы для хранения ответов.
Я установил то же приложение в помещении (Linux), и у меня нет проблем. Мне посоветовала другая команда, которая развернула то же приложение (другую версию) на PCF, чтобы использовать сценарий (ниже) для сбора информации VCAP_SERVICES для подключения к базе данных. Однако после «cf push» приложение вообще не работает. Это скрипт PHP. Мне кажется, похожий код в Java.
Почему мне нужно предоставлять информацию VCAP_SERVICES в базу данных на PCF?
Возможно, если я пойму, что пытается сделать сценарий, я смогу решить проблему.
Любая информация и / или советы будут высоко оценены.
class ApplicationConfiguration {
private static function decrypt_password($base64_encrypted_password, $cf_instance_ip, $uuid) {
$rsa_private_key = self::lookup_rsa_private_key ( $cf_instance_ip, $uuid );
$encrypted_password = base64_decode ( $base64_encrypted_password );
$decryption_result = openssl_private_decrypt ( $encrypted_password, $decrypted_password, $rsa_private_key );
return $decrypted_password;
}
private static function lookup_rsa_private_key($cf_instance_ip, $uuid) {
$private_key_lookup_url = 'http://' . $cf_instance_ip . ':1199/v1/cred/private_key/' . $uuid;
// SSL certificate is currently self-signed, disable all validation
$contextOptions = array (
'ssl' => array (
'verify_peer' => false,
'verify_peer_name' => false
)
);
$rsa_private_key = file_get_contents ( $private_key_lookup_url, false, stream_context_create ( $contextOptions ) );
return $rsa_private_key;
}
public static function getApplicationConfigurations() {
$appConfigurations = array ();
$dbDetails = getenv ( "VCAP_SERVICES" );
$appConfigurations ["debug"] = getenv ( "DEBUG" );
$appConfigurations ["debugsql"] = getenv ( "DEBUG_SQL" );
if (getenv ( "TABLE_PREFIX" ) == NULL) {
$appConfigurations ["tablePrefix"] = 'lime_';
} else {
$appConfigurations ["tablePrefix"] = getenv ( "TABLE_PREFIX" );
}
$dbDetailsObject = json_decode ( $dbDetails, true );
$credentials = array ();
if (array_key_exists ( "mariadb", $dbDetailsObject ) && $dbDetailsObject ["mariadb"] != NULL) {
$credentials = $dbDetailsObject ['mariadb'] [0] ["credentials"];
$appConfigurations ["connectionString"] = ('mysql:host=' . $credentials ["hostname"] . ';port=' . $credentials ["port"] . ';dbname=' . $credentials ["schema"] . ';');
} else {
$credentials = $dbDetailsObject ['p-mysql'] [0] ["credentials"];
$appConfigurations ["connectionString"] = ('mysql:host=' . $credentials ["hostname"] . ';port=' . $credentials ["port"] . ';dbname=' . $credentials ["name"] . ';');
}
$appConfigurations ["userName"] = $credentials ["username"];
$appConfigurations ["password"] = $credentials ["password"];
if (array_key_exists ( "appGuid", $credentials ) && $credentials ["appGuid"] != NULL) {
$cf_instance_ip = getenv ( "CF_INSTANCE_IP" );
$appConfigurations ["password"] = self::decrypt_password ( $credentials ["password"], $cf_instance_ip, $credentials ["appGuid"] );
}
return $appConfigurations;
}
}
Разве это не вопрос предоставления пользователю БД надлежащих прав?
Других решений пока нет …