execコマンドがvagrantのamazon linux2では問題なく動作するのに、ec2にデプロイして実行すると反応しない。
execコマンドだとダメそうなので、SymphonyのProcessでやってみたが、それでもダメ。
NLPは最も肝となる処理なので諦めるわけにはいかん、とトラブルシューティングを丸一日。Webの記事を探しまくるも一向に解決せず。
該当のcontroller
$input = $request->input;
$replace_input = str_replace(" ", "\ ", $input);
$path = app_path() . "/python/main.py";
// $command = "python3 " . $path . " ".$replace_input;
// exec($command, $output);
$process = new Process(["python3", $path, $replace_input]);
$process->run();
$output = $process->getOutput();
dd($output);
結論から言うと、ProcessFailedExceptionでエラー原因を表示させたらわかった。sudu pip3でpandas, sklearn, MeCabなどをインストールすればよかった。
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;
// 省略
$process = new Process(["python3", $path, $replace_input]);
$process->run();
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}
エラーが起きたら、まず、Exceptionで原因を調べるのが早いですね。
laravelでpythonの処理は変則的なので、かなり焦りました。
もっと上達してええええええええええええ