gpt4 book ai didi

ruby-on-rails-3 - 适用于雾/载波的动态 EC2 存储桶选项

转载 作者:行者123 更新时间:2023-12-03 00:40:25 25 4
gpt4 key购买 nike

我有一个 Rails3 应用程序,它使用 Carrierwave 和 Fog 将数据存储到 Amazon 的 S3。我正在构建的这个应用程序要求我允许每个用户拥有自己的安全 EC2 存储桶。该应用程序的前提是用户将创建一个帐户(设计),我将在应用程序的 EC2 用户和密码下为该用户生成一个存储桶。根据当前文档,我还没有看到一种拥有多个存储桶的方法,因为这是在 FOG YML 中配置的。我想询问基于用户属性动态设置此 FOG_DIRECTORY 的替代方案。

我知道有一种方法可以管理动态文件夹,但这不起作用,因为我需要用户专用的存储桶。

提前致谢!

最佳答案

假设您的存储桶已经存在。请尝试以下操作:

#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

请注意嵌套过程,在撰写此答案时,载波的文档不正确。如果你希望fog_host是动态的,你必须包装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 函数以适合您的存储桶命名约定。

如果您希望在开发中使用固定存储桶而不是每个用户一个存储桶,则可以添加一些条件逻辑。

还有this博文概述了另一种方法。

关于ruby-on-rails-3 - 适用于雾/载波的动态 EC2 存储桶选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9798157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com