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の処理は変則的なので、かなり焦りました。
もっと上達してええええええええええええ