一旦通过 ssh 连接到我的共享主机,如何告诉 Deployer 使用不同的 PHP 版本?
How to tell Deployer to use different PHP version once ssh'ed to my shared hosting?
我正在尝试使用 Deployer 将 Laravel 应用程序从本地 ~/Code/project_foo
.
部署到共享主机(使用 laravel 配方)
重点是当我通过 ssh
连接到我的共享主机服务器时,默认 php -v
版本是 5.6.33
。我确认我可以通过调用 php70 -v
甚至像 /usr/local/bin/php70 whatever
.
这样的整个路径来即时更改 php 版本
关键是我不知道如何告诉部署者使用必需的 php70
调用命令,否则 composer install
会失败。
所以在终端中,我在 Laravel 项目的根目录中,我只需调用:
dep deploy
我的 deploy.php
很乱而且非常简单,但这只是概念验证。我正在努力弄清楚一切,然后我会让它看起来更好。
我检查了 source code of the laravel recipe,我看到有:
{{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');
好的,我找到了解决方案。
我添加了(在require
之后):
set('bin/php', function () {
return '/usr/local/bin/php70';
});
对于搜索更改 Composer PHP 版本的任何人:
set('bin/composer', function () {
return '/usr/bin/php7.4 /usr/local/bin/composer';
});
有功能locateBinaryPath()
所以结果是:
set('bin/php', function () {
return locateBinaryPath('php7.4');
});
首先找到php路径和作曲家路径使用这个
了解更多信息 Setting PHP versions in Deployer deployments
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';
});
我正在尝试使用 Deployer 将 Laravel 应用程序从本地 ~/Code/project_foo
.
重点是当我通过 ssh
连接到我的共享主机服务器时,默认 php -v
版本是 5.6.33
。我确认我可以通过调用 php70 -v
甚至像 /usr/local/bin/php70 whatever
.
关键是我不知道如何告诉部署者使用必需的 php70
调用命令,否则 composer install
会失败。
所以在终端中,我在 Laravel 项目的根目录中,我只需调用:
dep deploy
我的 deploy.php
很乱而且非常简单,但这只是概念验证。我正在努力弄清楚一切,然后我会让它看起来更好。
我检查了 source code of the laravel recipe,我看到有:
{{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');
好的,我找到了解决方案。
我添加了(在require
之后):
set('bin/php', function () {
return '/usr/local/bin/php70';
});
对于搜索更改 Composer PHP 版本的任何人:
set('bin/composer', function () {
return '/usr/bin/php7.4 /usr/local/bin/composer';
});
有功能locateBinaryPath()
所以结果是:
set('bin/php', function () {
return locateBinaryPath('php7.4');
});
首先找到php路径和作曲家路径使用这个 了解更多信息 Setting PHP versions in Deployer deployments
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';
});