据我所知,我可以通过传递use_iam_profile =>来配置雾以使用IAM实例配置文件(我通过fog / carrierwave上传到S3)真正。我还没想到的是如何在EC2实例之外测试我的代码,就像在我的本地机器上一样。人们正在使用这种策略吗?
答案 0 :(得分:0)
我不知道别人怎么会这样做,但这是我提出的策略。我有一个看起来像这样的config.yml:
default: &default
aws:
s3:
bucket: 'my-production-bucket'
fog: &fog
credentials: &credentials
provider: 'AWS'
region: 'us-east-1'
development: &development
<<: *default
aws:
s3:
bucket: 'my-dev-bucket'
fog:
<<: *fog
credentials:
<<: *credentials
aws_access_key_id: 'ID_WITH_DEV_BUCKET_ACCESS_ONLY'
aws_secret_access_key: 'CORRESPONDING_SECRET'
test:
<<: *development
production:
<<: *default
fog:
<<: *fog
credentials:
<<: *credentials
use_iam_profile: true
我也在app_config.rb中使用这个技巧来加载我的config.yml文件(此解决方案不需要,但它会使下一部分对你更有意义):
require 'ostruct'
require 'yaml'
all_config = YAML.load_file(Rails.root.join('config', 'config.yml')) || {}
env_config = all_config[Rails.env] || {}
AppConfig = OpenStruct.new(env_config)
然后,在我的config / initializers / carrier_wave.rb文件中:
CarrierWave.configure do |config|
config.fog_credentials = AppConfig.fog['credentials'].symbolize_keys
config.fog_directory = AppConfig.aws['s3']['bucket']
end
注意:
symbolize_keys
调用是必要的,因为默认情况下我
结束了以字符串为键的哈希,而Fog正在寻找
符号。CarrierWave::Uploader::Base.fog_credentials
哈希完全按照我的预期出现,它应该工作得很好
当我到达那里时。最终结果是,在所有环境中,AppConfig.fog['credentials']
哈希都会获得相同的:region
和:provider
。在开发中,它还包含ID和秘密。在制作中,它不包含ID或秘密,而是获得:use_iam_profile => true