使用Fog / Carrierwave和IAM实例配置文件进行本地(EC2外)测试?

时间:2015-03-04 17:56:37

标签: ruby amazon-s3 carrierwave fog

据我所知,我可以通过传递use_iam_profile =>来配置雾以使用IAM实例配置文件(我通过fog / carrierwave上传到S3)真正。我还没想到的是如何在EC2实例之外测试我的代码,就像在我的本地机器上一样。人们正在使用这种策略吗?

1 个答案:

答案 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

注意:

  1. symbolize_keys调用是必要的,因为默认情况下我 结束了以字符串为键的哈希,而Fog正在寻找 符号。
  2. 是的,我正在检查应用ID和密码,但你不是 不得不;你可以用环境变量来做这件事。 个人选择,我可以稍后更改。
  3. 这就像 在当地预期,但我还没有在EC2尝试过。因为在每个 Rails环境CarrierWave::Uploader::Base.fog_credentials 哈希完全按照我的预期出现,它应该工作得很好 当我到达那里时。
  4. 最终结果是,在所有环境中,AppConfig.fog['credentials']哈希都会获得相同的:region:provider。在开发中,它还包含ID和秘密。在制作中,它不包含ID或秘密,而是获得:use_iam_profile => true