Ruby on rails 在Carrierwave使用不同的S3铲斗进行生产和开发
我开始玩了,作为一种替代 从文档中可以看出,要使用S3,我应该在初始值设定项中配置Fog:Ruby on rails 在Carrierwave使用不同的S3铲斗进行生产和开发,ruby-on-rails,ruby-on-rails-3,amazon-s3,paperclip,carrierwave,Ruby On Rails,Ruby On Rails 3,Amazon S3,Paperclip,Carrierwave,我开始玩了,作为一种替代 从文档中可以看出,要使用S3,我应该在初始值设定项中配置Fog: CarrierWave.configure do |config| config.fog_credentials = { :provider => 'AWS', # required :aws_access_key_id => 'xxx', # required :aws_secret_access_ke
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => 'AWS', # required
:aws_access_key_id => 'xxx', # required
:aws_secret_access_key => 'yyy', # required
:region => 'eu-west-1' # optional, defaults to 'us-east-1'
}
end
但是,如何为不同的环境设置不同的存储桶?使用回形针,我会在yml文件中为开发/生产/etc指定不同的凭证和/或存储桶。使用carrierwave的最佳方法是什么?如果您愿意,您可以用几乎完全相同的方法来完成,就像这个完全未经测试的想法:
# config/initializers/carrierwave.rb
CarrierWave.configure do |config|
my_config = "#{Rails.root}/config/fog_credentials.yml"
YAML.load_file(my_config)[Rails.env].each do |key, val|
config.send("#{key}=", val)
end
end
# config/fog_credentials.yml
common: &common
aws_access_key: 'whatever'
...
fog_credentials:
provider: 'whoever'
...
production:
<<: *common
fog_directory: 'my-production-bucket'
development:
<<: *common
fog_directory: 'my-dev-bucket'
v2
class S3ArticleUploader
我没有按照您的建议测试加载YAML文件,但我将使用选项2并使用一个简单的条件语句。看起来不错。谢谢
CarrierWave.configure.do |config|
if Rails.env.development?
# configure one env
else
# configure another
end
# configure common stuff
end
class S3ArticleUploader < CarrierWave::Uploader::Base
if Rails.env.test?
storage :file
else
storage :fog
end
def fog_directory
ARTICLE_UPLOADER_BUCKET
end
def store_dir
"#{ model.parent_id }/#{ model.id }"
end
end
# config/environments/development.rb
ARTICLE_UPLOADER_BUCKET = 'development-articles'
# config/environments/production.rb
ARTICLE_UPLOADER_BUCKET = 'production-articles'
def store_dir
if self._storage == CarrierWave::Storage::File
"#{Rails.root}/tmp/files/#{ model.parent_id }/#{ model.id }"
elsif self._storage == CarrierWave::Storage::Fog
"#{ model.parent_id }/#{ model.id }"
end
end
class S3ArticleUploader < CarrierWave::Uploader::Base
if Rails.env.test?
storage :file
else
storage :fog
end
def initialize
self.fog_directory = ARTICLE_UPLOADER_BUCKET
end
def store_dir
"#{ model.parent_id }/#{ model.id }"
end
end