【发布时间】:2015-03-04 17:56:37
【问题描述】:
我知道我可以通过传递 use_iam_profile => true 来配置雾以使用 IAM 实例配置文件(我通过雾/载波上传到 S3)。我还没有弄清楚如何在 EC2 实例之外测试我的代码,比如在我的本地机器上。有没有人们正在使用的策略?
【问题讨论】:
标签: ruby amazon-s3 carrierwave fog
我知道我可以通过传递 use_iam_profile => true 来配置雾以使用 IAM 实例配置文件(我通过雾/载波上传到 S3)。我还没有弄清楚如何在 EC2 实例之外测试我的代码,比如在我的本地机器上。有没有人们正在使用的策略?
【问题讨论】:
标签: ruby amazon-s3 carrierwave fog
我不知道其他人会怎么做,但这是我想出的策略。我有一个如下所示的 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
【讨论】: