プログラミング 美徳の不幸

Ruby, Rails, JavaScriptなどのプログラミングまとめ、解説、備忘録。

imagemagick

f:id:tkot:20151016204016p:plain

PDFファイルを指定=> 各ページをwebp形式で保存 => それぞれを一つのレコードとして保存(例えばPdfPageというモデル) => PdfPageは今作った画像と、さらに横幅をリサイズした画像の2つを持っている。これをcarrierwaveで表現。

ということをしようとして、一連のロジックをsidekiqで実行してみてるんですが、その結果が上の画像なんですよ。。。全然進まないし(1ページ30秒くらいかかるので1PDFで1時間くらい)

まぁでもよく考えたらこの処理、各ページごとにwebp形式で保存まではともかく、その先がcarrierwaveに任せてる分でconvertとアップロードが絡み合ってるので、まぁ冗長といえば冗長なんだよね。 ベストなのを考えればこちらで一括でwebpで処理したものを最後にまるごとストレージにアップロードするのが通信量的に楽だし。

あと処理は本当はwebpで完結する(cwebpコマンド)んだけどcarrierwave使うと勝手にimagemagick使うので遅くなるんだよね。

ちょっとインフラとか画像詳しくないからこれなにか設定ミスで致命的に遅くなってるのか、遅くてしょうがない処理なのかがわからないし、さらに遅いの許容したほうが楽なのか処理の実装変える(=脱carrier)ほうがいいのかもよくわからない。わりと今年一番実装困ってるかも。

ちなみに遅いだけならとりあえずsidekiqに投げっぱなしで寝るんですけどちょっときつい要求するとsidekiqがヘコタレて勝手に止まるのなんなんですかね? こっちは設定の問題だろうけど。 n1-standardの限界なのかな・・・?