PCF — приложению не разрешено создавать таблицы в MySQL

Я успешно развернул приложение 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;
    }
}

person Perugini    schedule 06.04.2018    source источник
comment
Приложению не разрешено создавать таблицы в MySQL Приложение в основном работает так, как ожидалось, за исключением того, что база данных MySQL не позволяет приложению создавать таблицы. Как вы узнали, что получили какое-то сообщение об ошибке? Если это так, отправьте сообщение об ошибке здесь.   -  person Raymond Nijland    schedule 06.04.2018
comment
VCAP_SERVICES — это то, как ваше приложение может получить доступ к информации, предоставляемой платформой. С CF вы создаете экземпляр службы и привязываете его к своему приложению. Это действие сообщает платформе, что вы хотите, чтобы приложение могло использовать эту службу. Платформа делает это, предоставляя информацию об этом экземпляре службы через VCAP_SERVICES. Ваше приложение должно читать VCAP_SERVICES и использовать информацию там. Похоже, что сценарий, который вы предоставили, делает это. Он также считывает некоторые переменные среды и использует их для конфигурации.   -  person Daniel Mikusa    schedule 08.04.2018
comment
См. эту ссылку для получения дополнительной информации о привязке службы -› docs.cloudfoundry.org/ руководство разработчика/услуги/   -  person Daniel Mikusa    schedule 08.04.2018


Ответы (1)


Разве это не вопрос предоставления пользователю БД соответствующих прав?

person Gabriel    schedule 12.04.2018