Railsの画像アップロードをCarrierwave + S3からCarrierwave + Cloudinaryに移行しようとして詰まった話

この記事を書いたひと: @t4traw 2017年11月27日

OKCAMPの画像アップロード・表示が遅く感じたのでCarrierwave + S3からCarrierwave + Cloudinaryに移行しようとしたとき、cloudinary gemで生成されるurlが何故か#{cloud_name}-res.cloudinary.comになってしまい、それで結構悩んだのでメモ。

詰まる前までにやったことは、

  • herokuのAdd-onsでcloudinaryを追加
  • Gemfileにcloudinaryを追加
  • uploaderにinclude Cloudinary::CarrierWaveを追加
  • cloudinary.ymlの中身を編集して追加

これで、cl_image_tag(hoge.image_url)などすれば、//res.cloudinary.com/foobar/image/upload/hoge.jpgなどといったurlが生成されるはずなのに、手元で動かすと//foobar-res.cloudinary.com/image/upload/hoge.jpgといったurlが生成される。

あれ?バージョンが変わった?アップローダーになんか変なの書いた?今の通常はこれで、このサブドメインを有効にすればいいの?そもそもconfig.sub_domain = falseすればいい?だめ?

とか色々やってた結果、下記のurlにprivate_cdnをオフにするconfigが書いてあり、これをfalseにすれば良かったです。

https://cloudinary.com/documentation/rails_additional_topics#configuration_options

実際に書いたconfigがこちら。https化とcdn_subdomainも同時にfalseにしてあります。

# config/cloudinary.rb
if Rails.env.production?
  Cloudinary.config do |config|
    config.secure = true
    config.cdn_subdomain = false
    config.private_cdn = false
  end
end

こうすれば、//res.cloudinary.com/foobar/image/upload/hoge.jpgといったurlが生成されるようになりました。

private_cdn - Boolean (default: false).とか書いてあるけど、あえてfalseをしていする必要がありました。