Выходной буфер Artisan не содержит всех выходных данных.
Я использую следующий код, чтобы перенаправить вывод команды ремесленника в пределах маршрута.
use Symfony\Component\Console\Output\BufferedOutput;
Route::get('/restart', function()
{
$output = new BufferedOutput;
Artisan::call('remote:restart', array(), $output);
return $output->fetch();
});
Это работает для большинства случаев. Однако, если в команде я использую компонент SSH для запуска некоторых задач на удаленном сервере, результат, полученный в результате SSH::into()->run()
будет игнорироваться приведенным выше кодом.
Если я запускаю команду artisan вручную, я получаю следующий вывод:
start
[root@remote-host] (xxxx) Stopping php-fpm:
[root@remote-host] (xxxx) [ OK ]
[root@remote-host] (xxxx) Starting php-fpm:
[root@remote-host] (xxxx) [ OK ]
[root@remote-host] (xxxx) Stopping nginx:
[root@remote-host] (xxxx) [ OK ]
[root@remote-host] (xxxx) Starting nginx:
[root@remote-host] (xxxx) [ OK ]
end
Но $output->fetch() возвращает только:
start end
1 ответ
Решение
Вы должны установить выходной интерфейс на нем:
use Symfony\Component\Console\Output\BufferedOutput;
Route::get('/test', function()
{
$output = new BufferedOutput;
SSH::setOutput($output);
SSH::run('ls -la');
return $output->fetch();
});