2016-09-08 5 views
0

Erklären Sie mir bitte. Wie führe ich Befehlszeilenbefehle von meinem Controller aus?Laravel - Konsolenbefehl auf dem aktuellen Server ausführen

für i Beispiel wollen icecast Server

natürlich starten i exec('icecast2 run -c path/to/config.xml')

verwenden können, ist es Laravel Weg, dies zu tun?

+0

https://laravel.com/docs/5.2/envoy – GONG

+0

@GONG Ja, sah das schon, aber ich kann nicht bekommen, wie man Abgesandten Befehl von meinem Controller – ArtemSky

+1

Ich glaube nicht, dass es eine "Laravel Art und Weise", dies zu tun ist. Sie können jedoch 'exec' oder' shell_exec' verwenden. – Jonathon

Antwort

1

erstellen macro in Ihrem Envoy.blade.php, lesen Sie mehr: https://laravel.com/docs/5.2/envoy

@macro('deploy') 
    //your commands here 
@endmacro 

Die yo es durch die Symfony-Prozess aufrufen können (http://symfony.com/doc/current/components/process.html#usage), etwa so:

$process = new Process("/home/$user/.composer/vendor/bin/envoy run deploy"); 
$process->setTimeout(3600); 
$process->setIdleTimeout(300); 
$process->setWorkingDirectory(base_path()); 
$process->run(function ($type, $buffer) 
{ 
    //print output 
}); 

es noch besser einige erstellen externe Klasse dafür.

<?php 

namespace App\Services; 

use Symfony\Component\Process\Process; 

class Envoy 
{ 

public function run($task, $live = false) 
{ 
    $result = []; 

    $process = new Process('~/.composer/vendor/bin/envoy run '. $task); 
    $process->setTimeout(3600); 
    $process->setIdleTimeout(300); 
    $process->setWorkingDirectory(base_path()); 
    $process->run(
     function ($type, $buffer) use ($live, &$result) { 
      $buffer = str_replace('[127.0.0.1]: ', '', $buffer); 

      if ($live) { 
       echo $buffer . '</br />'; 
      } 

      $result[] = $buffer; 
     } 
    ); 

    return $result; 
} 
} 

Und es vom Controller nennen:

public function store(Request $request, Envoy $envoy) 
{ 
    $group = $this->group->create($request->all()); 

    $result = $envoy->run('<some command>'); 

    // Do something with $result... 
} 

Credits: https://laracasts.com/discuss/channels/general-discussion/run-envoy-from-controller

Verwandte Themen