【问题标题】:Ruby on Rails - AWS-SDK configuration fileRuby on Rails - AWS-SDK 配置文件
【发布时间】:2015-03-23 11:42:25
【问题描述】:

我在我的 Rails 项目中使用 AWS-SDK gem,我想要一种初始化文件直接连接到我的存储库并直接在 Rails 控制台中进行更改,如下所示:

    # At config/initializers/aws.rb

    Aws::S3::Client.new(
      :access_key_id => 'ACCESS_KEY_ID',
      :secret_access_key => 'SECRET_ACCESS_KEY'
    )

我已经查找了文档或教程,但对我来说并不清楚。我该怎么做?谢谢!

【问题讨论】:

    标签: ruby-on-rails amazon-web-services aws-sdk


    【解决方案1】:

    我觉得你可以这样试试

    把它放在 aws.rb 中

    AWS.config(
       :access_key_id => ENV['ACCESS_KEY_ID'],
       :secret_access_key => ENV['SECRET_ACCESS_KEY']
    )
    

    当你在需要的地方初始化对象时,会调用配置

    s3 = AWS::S3.new
    

    【讨论】:

    • 那个配置对应1.0版本,现在的版本有不同的实现方式……
    • 对于版本 2,如果您从 ENV 获取凭据,则无需设置配置。您将默认使用 ENV 的 AWS 客户端。
    【解决方案2】:

    要在 Rails 应用程序中的 AWS 服务客户端之间共享配置,请从配置初始化程序配置适用于 Ruby 的 AWS 开发工具包。

    # config/initializers/aws-sdk.rb
    Aws.config.update(
      credentials: Aws::Credentials.new('access-key-id', 'secret-access-key'),
      region: 'us-east-1',
    )
    

    现在您可以从任何服务构建客户端对象,无需任何选项:

    s3 = Aws::S3::Client.new
    ec2 = Aws::EC2::Client.new
    

    请注意,您应避免将凭据硬编码到您的应用程序中。如果您的源代码被访问并且难以轮换凭据,这可能会带来安全风险。

    我建议通过 ENV['AWS_ACCESS_KEY_ID']ENV['AWS_SECRET_ACCESS_KEY'] 或 EC2 实例配置文件使用手动配置。

    【讨论】:

    【解决方案3】:

    终于找到了解决办法:

    1. 在您的/config/initializers 文件夹中创建文件aws.rb
    2. aws.rb 写:

      S3Client = Aws::S3::Client.new(
          access_key_id: 'ACCESS_KEY_ID',
          secret_access_key: 'SECRET_ACCESS_KEY',
          region: 'REGION'
      ) 
      

    就是这样。谢谢大家的回答!

    【讨论】:

    • 您在示例中创建了一个全局常量。虽然这可行,但我建议您将配置初始化程序限制为仅配置凭据。
    【解决方案4】:

    还有 aws-sdk-rails (1.0.0)

    # config/initializers/aws.rb
    Aws.config[:credentials] = Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'])
    

    【讨论】:

      【解决方案5】:

      试试这个配置:-

      在 config/intitalizers/s3.rb

      Paperclip.interpolates(:s3_eu_url) { |attachment, style|
        "#{attachment.s3_protocol}://s3-eu-west-1.amazonaws.com/#{attachment.bucket_name}/#{attachment.path(style).gsub(%r{^/}, "")}"
      }
      

      config/initializers/paperclip.rb

      require 'paperclip/media_type_spoof_detector'         
      module Paperclip         
       class MediaTypeSpoofDetector        
          def spoofed?         
            false       
          end       
        end        
      end 
      
      Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
      Paperclip::Attachment.default_options[:path] = '/:class/:id/:style/:filename'
      S3_CREDENTIALS = Rails.root.join("config/s3.yml")
      

      /config/s3.yml

      development:
        bucket: development_bucket
        access_key_id: AKIA-----API KEYS---------MCLXQ
        secret_access_key: qTNF1-------API KEYS--------DTy+rPubaaG
      production:
        bucket: production_bucket
        access_key_id: AKI-----API KEYS--------LXQ
        secret_access_key: qTNF1dW---API KEYS---+rPubaaG
      

      希望你在Gemfile中有gem "aws-sdk"

      在模型中添加您的资产

      has_attached_file :avatar,
       :styles => {:view => "187x260#"},
      :storage => :s3,
      :s3_permissions => :private,
      :s3_credentials => S3_CREDENTIALS
      

      在公共场合使用带有静态图像的 Rails 控制台验证

      Image.create(avatar: File.new("#{Rails.root}/public/images/colorful_blue.jpg"))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-13
        • 1970-01-01
        • 2015-02-06
        • 2011-08-17
        • 2015-09-02
        • 2014-04-23
        相关资源
        最近更新 更多