Мы переносим веб-приложение PHP / PostgreSQL с сервера Linux на Cloud Foundry.
У нас есть основное приложение, работающее на экземпляре с PHP, назовите его экземпляром приложения. У нас есть база данных, запущенная в другом экземпляре с Postgres, назовите ее экземпляром db. Экземпляр приложения подключается к экземпляру db напрямую через хост и порт через расширение Postgres в PHP.
Часть приложения использует pg_dump в PHP, используя метод phec exec (). (Игнорирование последствий для безопасности ..)
Если мы предположим, что экземпляр приложения не имеет двоичного файла pg_dump И не может ssh войти в экземпляр db (который предположительно имеет pg_dump), то есть способ:
Я нашел эта функция plpgsql это может быть хорошим вариантом для клонирования схем, но не решает проблему резервного копирования. Возможность вызывать pg_dump из PHP позволит сэкономить много переписывания кода.
Благодарю.
Одним из вариантов будет продавец pg_dump
с вашим приложением.
Для этого раскрутите контейнер Ubuntu 14.04 или виртуальную машину, установите в него Postgres и скопируйте pg_dump
из виртуальной машины в директорию вашего приложения (куда бы вы ни положили, на самом деле это не имеет значения, просто нигде не было бы публично) Хитрость в этой работе заключается в том, что вам также необходимо скопировать любые зависимые разделяемые библиотеки. Если вы бежите ldd pg_dump
(полный или относительный путь) в вашей виртуальной машине или контейнере, вы сможете получить список библиотек, которые pg_dump
зависит от. Скопируйте их в свое приложение, вы можете поместить их в тот же каталог, что и ваш pg_dump
бинарный (хотя на самом деле не имеет значения, где они существуют).
Затем, когда вы звоните exec
из вашего PHP-приложения вам нужно сделать две вещи. Во-первых, используйте полный путь к вашему pg_dump
двоичный файл. Во-вторых, вам нужно установить переменную среды LD_LIBRARY_PATH
указать расположение любых необходимых общих библиотек. Комбинация должна запускать двоичный файл, который вы скопировали из виртуальной машины, используя совместно используемые библиотеки, которые вы скопировали, и это все, что вам нужно для запуска pg_dump
,
Лучший путь будет только установить LD_LIBRARY_PATH
напрямую и только когда вы запускаете бинарный файл, но если это не вариант, вы можете добавить .profile
файл в ваше приложение и установить его там. Вот пример того, что вы можете поместить в этот файл.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/path/to/pg_libs
https://docs.cloudfoundry.org/devguide/deploy-apps/deploy-app.html#profile
Других решений пока нет …