1

我正在使用部署器在服务器上打包一个 symfony 应用程序。在部署期间,我还需要运行 composer install 来运行 bin/console 等重要命令。只有这样才能完成部署。不幸的是,部署失败并在“composer install”处中断并显示错误消息:

[Deployer\Exception\RuntimeException (127)]
The command "cd /usr/home/xxx/public_html/sw6-staging/releases/1.1 && composer install" failed.
Exit Code: 127 (Command not found)
================
bash: line 1: composer: command not found

这是 deploy.php 中的任务看起来:

task('sw:deploy', function(){
run('cd {{release_path}} && composer install');
});

task('deploy', [
'deploy:prepare',
'deploy:lock',
'deploy:release',
'deploy:update_code',
'sw:deploy',
])->desc('Deploy your project');

但是,如果我通过 CLI 直接在服务器上运行命令“composer install”,它就会运行。有什么问题,我该如何解决?

部署程序版本 6.8。PHP 版本 7.2

非常感谢

4

2 回答 2

0

在 6.8 中,您可以使用shellCommand选项来拥有“登录 shell”(并加载 shell 启动文件):

host('example.com')
    ->shellCommand('bash -ls')
example.com:
  shellCommand : bash -ls
于 2021-06-23T06:24:52.383 回答
0

我有完全相同的问题。似乎部署程序使用非登录、非交互式 shell 连接到服务器,该 shell 不会加载 shell 启动文件,如~/.bash_profile-> ~/.bash_login-> ~/.profile

在我的情况下,.bashrc有以下条目:

PATH="$HOME/.linuxbrew/bin:$HOME/.linuxbrew/sbin:$PATH"

但是node,无论是,npm还是composer在哪里都可以到达,所以很明显这个文件没有被使用。也没有,~/.bash_profile所以我创建了一个并在那里添加了路径:

echo "PATH="$HOME/.linuxbrew/bin:$HOME/.linuxbrew/sbin:$PATH" > ~/.bash_profile

然后我在调用之前使用source命令加载:~/.bash_profilecomposer install

task('sw:build', static function () {
    run('source /usr/home/username/.bash_profile && cd {{release_path}} && composer install');
});
于 2021-03-18T19:31:48.457 回答