Как указать Deployer использовать другую версию PHP после ssh'ed для моего общего хостинга?
Я экспериментирую с Deployer для развертывания приложения Laravel на виртуальном хостинге (используя рецепт laravel) из моего локального ~/Code/project_foo
,
Дело в том, что когда я подключен к своему серверу общего хостинга через ssh
тогда по умолчанию php -v
версия 5.6.33
, Я подтвердил, что могу изменить версию php на лету, позвонив php70 -v
или даже весь путь, как /usr/local/bin/php70 whatever
,
Дело в том, что я не знаю, как сказать развертывателю вызывать команды, используя php70
что требуется, в противном случае composer install
выходит из строя.
Итак, в Терминале я нахожусь в корне проекта Laravel и просто звоню:
dep deploy
мой deploy.php
это грязно и очень просто, но это всего лишь доказательство концепции. Я пытаюсь все выяснить, и тогда я буду выглядеть лучше.
Я проверил исходный код рецепта Laravel, и увидел, что есть:
{{bin/php}}
но я не знаю, как переопределить значение, чтобы соответствовать тому, что мой хостинг говорит мне использовать:
/usr/local/bin/php70
Пожалуйста, дайте мне любые подсказки, как заставить скрипт использовать другую версию PHP после подключения к удаленному хосту / серверу.
Это целый сценарий:
<?php
namespace Deployer;
require 'recipe/laravel.php';
//env('bin/php', '/usr/local/bin/php70'); // <- I thought that this will work but it doesn't change anything
// Project name
set('application', 'my_project');
// Project repository
set('repository', 'git@github.com:xxx/xxx.git');
// [Optional] Allocate tty for git clone. Default value is false.
set('git_tty', true);
// Shared files/dirs between deploys
add('shared_files', []);
add('shared_dirs', []);
// Writable dirs by web server
add('writable_dirs', []);
// Hosts
host('xxx')
->user('xxx')
->set('deploy_path', '/home/slickpl/projects/xxx');
// Tasks
task('build', function () {
run('cd {{release_path}} && build');
});
// [Optional] if deploy fails automatically unlock.
after('deploy:failed', 'deploy:unlock');
// Migrate database before symlink new release.
before('deploy:symlink', 'artisan:migrate');
4 ответа
ОК, я нашел решение.
Я добавил (после require
):
set('bin/php', function () {
return '/usr/local/bin/php70';
});
Для всех, кто ищет изменение версии PHP для Composer:
set('bin/composer', function () {
return '/usr/bin/php7.4 /usr/local/bin/composer';
});
Есть функция
locateBinaryPath()
итак результат:
set('bin/php', function () {
return locateBinaryPath('php7.4');
});
первый найденный путь php и путь композитора используют это для получения дополнительной информации Настройка версий PHP в развертываниях Deployer
find / -type f -name "php" 2>&1 | grep -v "Permission denied"
find / -type f -name "composer" 2>&1 | grep -v "Permission denied"
тогда
set('bin/composer',
function () {
return 'php_path composer_path';
});
как это
set('bin/composer',
function () {
return '/opt/remi/php73/root/usr/bin/php /usr/bin/composer';
});