herokuでCarrierwaveを使う時にいろいろハマった
Carrierwave関係はいろいろと書いていますが、
herokuで運用する時には制限がいろいろとあります。
スタックした時に巡ったサイトなんかをメモしておきます。
Carrierwaveのサイト内記事
Rails 超お手軽な画像アップローダー CarrierWave の使い方 | Workabroad.jp
RailsとCarrierWaveでAmazon S3に画像を保存する | Workabroad.jp
Railsの画像アップロードを倍速にする方法 | Workabroad.jp
参考サイト
Processing before storing · Issue #128 · lardawge/carrierwave_backgrounder · GitHub
carrierwave_backgrounder Githubでのやりとり。
herokuで使う方法を模索していたけど、やっぱだめみたい。
このgemにはstore_in_backgroundとprocess_in_backgroundがあって、process_in_backgroundは、バックグランドでいろいろな画像サイズを作りたいとかいう場合に役に立つ。
メイン画像とサムネだけ、みたいな場合はわざわざworkerプロセス動かす必要もないよね、ということでcarrierwave_backgrounderのherokuでの使用をあきらめました。
process_in_background useful if you have many versions that need to be created or are processing large files... otherwise the payoff is minimal.
dommmel : Free background jobs on heroku
herokuでバックグラウンドの処理をさせてようとすると、WebDynoの他に、WorkerDynoが必要です。
で、WebDynoは750時間フリーなので料金はかかりませんが、WorkerDynoは1時間から料金が発生。
記事はWebDynoでSidekiqを動かす方法(すなわち無料)を紹介してます。
少しテストしてみましたが、workerを動かせなかった。。
Scalable Heroku worker for Sidekiq - Manuel van Rijn
herokuでWorkerDynoを1ヶ月動かすと $0.05 x 24h x 30day = $36 とかになりますが、常時起きてる必要もないよね、ということで、必要な時に叩き起こす方法。最小限のコストで運用できます。
herokuでSidekiqを使うならRedis to goというaddonを使いますが、無料で使えるnanoにはいろいろと制限があります。nanoでSidekiqをやりくりする方法の紹介。
Sidekiq and Carrierwave, Part 3 - Iacutone
RailsCastで紹介されているのはCarrierwaveDirectというgemですが、carrierwave_backgrounderというgemもいいよーという紹介記事。
Ruby - HerokuでCarrierWaveを使う場合に注意すること - Qiita
タイトルのままです。
herokuでのBambooスタックとCedarスタックの違いとか、
Carrierwaveのwikiの情報が正しくないとか、
WebDynoを2つ以上つかっている場合、バリデーションで戻された場合に、
すでにアップされている画像を再利用すことはできないとか、
注意事項がわかりやすくまとまっています。
以上です。
結論は、いまのところ、
• herokuを使うならcarrierwaveの保存先はAmazon S3に。
• herokuを使うならcarrierwave_backgrounderは使わない。
- 何をしたいかによるけど、画像処理をあまりしないのなら意味がない。
• herokuを使うならcarrierwaveのキャッシュ機能は忘れる。
と、herokuを使うおかげでcarrierwaveの素敵な機能が使えません。
悲しいけど、今のところそういうことなのねー。
herokuで複数Dynoを使用していても一時ファイルを共有できる、みたいな機能ができたら使えるのかな。