実現したいこと
- Job/Queue機能を使って、画像処理機能を実現したい。
- Jobの中でImagickを使いたい。
前提
Laravelを使ってシステムを作っています。
PDFをjpgに変換するコードを書いていたのですが、
処理時間が長くなる為にJobとQueueを使って非同期処理を行おうと思いました。
以下が実際のJobのコードです。
<?php namespace App\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Imagick; class CreateOCRRecognitionResultJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** * Create a new job instance. */ public function __construct() { } /** * Execute the job. */ public function handle(): void { $imagick = new Imagick(); } }
use Imagick;
としていますが、Jobを実行すると以下のようなエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Class "Imagick" not found {"exception":"[object] (Error(code: 0): Class \"Imagick\" not found at ...
試したこと
- ImagickはDockerfileに追記してインストール済みです。
- Controllerにベタ書きするとエラーなく動きます。
- intervention/imageをインストールして、
new Image()
としても結果は同じでした。
/usr/bin/convert/の利用
$input = '省略'; $output = '省略'; $command = "/usr/bin/convert -density 200 -resize 1600x1600 $input $output"; system($command);
上記のように/usr/bin/conver
コマンドで実行してみましたが、以下のエラーメッセージが出ます。
sh: /usr/bin/convert: No such file or directory
こちらも同じく、Controller内やDockerDesktopのターミナルから実行すると正しくコマンドが実行され、Imagickで画像処理が可能でした。
Jobの中にコードを入れると動かないようです。
Jobの中では、importができないのでしょうか?
補足情報(FW/ツールのバージョンなど)
MacのDockerDesktopで以下のリポジトリを使い、Laravelを動かしています。
https://github.com/ucan-lab/docker-laravel
- 使用PC:MacBook Air M2 2022
- OSバージョン:macOS Ventura 13.5.1
- Docker Desktop:4.23.0
- フレームワーク:Laravel v10.10
- PHPバージョン:8.2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。