Попытка развернуть приложение Symfony 3.2/Doctrine на Swisscom PaaS.
Buildpack (PHP 7, httpd и т. д.) установлен, композитор работает и устанавливает зависимости, но при вызове дополнительных команд композитора, таких как cache:clear, я получаю:
[Doctrine\DBAL\Exception\ConnectionException]
An exception occured in driver: SQLSTATE[HY000] [2002] Connection refused
мой manifest.yml:
applications:
- services:
- dbservice
buildpack: php_buildpack
host: myapp
name: MyApp
instances: 1
memory: 640M
env:
SYMFONY_ENV: prod
PHP_INI_SCAN_DIR: .bp-config/php/conf.d
мои параметры.json:
"WEB_SERVER": "httpd",
"COMPOSER_INSTALL_OPTIONS": ["--no-dev --optimize-autoloader --no-progress --no-interaction"],
"COMPOSER_VENDOR_DIR": "vendor",
"SYMFONY_ENV": "prod",
"WEBDIR": "web",
"PHP_MODULES": "fpm",
"PHP_VERSION": "{PHP_70_LATEST}",
"PHP_EXTENSIONS": [
"bz2",
"zlib",
"curl",
"mcrypt",
"openssl",
"mbstring",
"pdo",
"pdo_mysql"
],
"ZEND_EXTENSIONS": [
"opcache"
]
И вот как я считываю учетные данные базы данных из VCAP и устанавливаю параметры в Symfony (который отлично работает с локальной настройкой VCAPSERVICES env vars):
$vcapServices = json_decode($_ENV['VCAP_SERVICES']);
$container->setParameter('database_driver', 'pdo_mysql');
$db = $vcapServices->{'mariadb'}[0]->credentials;
$container->setParameter('database_host', $db->host);
$container->setParameter('database_port', $db->port);
$container->setParameter('database_name', $db->name);
$container->setParameter('database_user', $db->username);
$container->setParameter('database_password', $db->password);
// Just for debug:
echo 'User: ';
var_dump($container->getParameter('database_user'));
echo 'Db: ';
var_dump($db);
Служба запущена, оба var_dump передают ожидаемые значения. Но все равно в соединении отказывают.
Что я делаю не так?
****EDIT**** Похоже, что здесь есть похожая проблема, но без решения: Cloud Foundry p-mysql
****РЕДАКТИРОВАТЬ****
Я отладил прямо до инструкции, где вызывается конструктор PDO.
Вызывается со следующими параметрами:
$dsn = mysql:host=10.0.20.18;port=3306;dbname=CF_DB922DD3_CACB_4344_9948_746E585732B5;
$username = "myrealusername"; // as looked up in VCAP_SERVICES
$password = "myrealpassword"; // as looked up in VCAP_SERVICES
$options = array();
Все выглядит точно так же, как это можно увидеть в веб-консоли для привязки службы.
Требуется ли unix_socket для успешного подключения?
****РЕДАКТИРОВАТЬ****
Поскольку Symfony использует некоторые постустановочные команды композитора (в данном случае, например, для очистки и разогрева кеша), которые требуют уже работающего соединения с базой данных, это не поддерживается службами БД облачным фондом, пока контейнер не полностью собран. и развернуто?
У меня заканчиваются идеи.