バケットが既に存在すると仮定します。次のことを試してください。
#config/initializers/carrierwave.rb
CarrierWave.configure do |config|
#...other configuration stuff...
config.fog_directory = 'null.example.com'
config.fog_host = proc do
proc do |file|
uploader = file.instance_variable_get :@uploader
"http://#{uploader.fog_directory}"
end
end
end
ネストされたプロシージャに注意してください。この回答の執筆時点で、carrierwave のドキュメントは正しくありません。fog_host を動的にしたい場合は、carrierwave 構成クラスが正しく動作するように proc をラップする必要があります。
fog_directory は後で動的に設定されますが。初期化子に何かが設定されていない場合、テストフレームワークなどは文句を言います(設定が常に上書きされて正しく機能します)。
#app/controllers/application_controller.rb
before_filter :set_bucket
def set_bucket
CarrierWave.configure do |config|
config.fog_directory = "#{current_user.id}.bucket.example.com"
end
end
バケットの命名規則に合わせて set_bucket 関数を変更します。
ユーザーごとのバケットではなく、開発で固定バケットが必要な場合は、条件付きロジックを追加できます。
また、このブログ投稿では、別のアプローチについて概説しています。