假设您的存储桶已经存在。尝试以下操作:
#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 是动态的,则必须包装proc 以便carrierwave 配置类做正确的事情。
即使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 函数以适合您的存储桶命名约定。
如果您想要开发中的固定存储桶而不是每个用户的存储桶,您可以添加一些条件逻辑。
此博客文章还概述了另一种方法。