execコマンドがvagrantのamazon linux2では問題なく動作するのに、ec2にデプロイして実行すると反応しない。
execコマンドだとダメそうなので、SymphonyのProcessでやってみたが、それでもダメ。
NLPは最も肝となる処理なので諦めるわけにはいかん、とトラブルシューティングを丸一日。Webの記事を探しまくるも一向に解決せず。
該当のcontroller
1 2 3 4 5 6 7 8 9 | $ 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などをインストールすればよかった。
1 2 3 4 5 6 7 8 9 | 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の処理は変則的なので、かなり焦りました。
もっと上達してええええええええええええ