[rails]carrierwaveで保存した画像のurlを取得する


carrierwave 0.10.0 で確認

imageカラムにcarrierwaveで保存した画像を保存している場合、デフォルトのままだとだとurlメソッドを実行してもpublic以下のパスのみで http://~ が設定されていません。

Sample.image.url  #=> /uploads/sample/image/1/sample.jpg

http://~ 形式のURLを取得するにはCarrierWaveのasset_host設定を行う必要があります。

config/initializers/carrierwave.rb に以下を追加

# config/initializers/carrierwave.rb

CarrierWave.configure do |config|
  config.asset_host = Settings.url
end

定数管理にはrails_configを使用しています。
(使い方に関してはこちらを参照)

# config/settings.yml

url: 'http://local.url'

環境に応じた設定を記述した後、再読み込みすると

Sample.image.url  #=> http://local.url/uploads/sample/image/1/sample.jpg

というように正しくURLが取得できます。

asset_hostを使えば、本番環境やstaging環境はs3やCloudFrontにURLを切り替える、ということも可能です。

参考