【问题标题】:How to upload images for ruby on rails app using paperclip gem onto IBM Bluemix Object Storage using S3 API?如何使用回形针 gem 将 ruby​​ on rails 应用程序的图像上传到使用 S3 API 的 IBM Bluemix Object Storage?
【发布时间】:2017-06-10 14:06:24
【问题描述】:

我一直在使用教程: https://devcenter.heroku.com/articles/paperclip-s3 用于将图像添加到 AWS 上的 S3 存储,但现在想使用支持 S3 API 的 IBM 对象存储(使用 gem 'aws-sdk')。

在下面使用:

config.paperclip_defaults = {
    storage: :s3,
    s3_credentials: {
      bucket: ENV.fetch('S3_BUCKET_NAME'),
      access_key_id: ENV.fetch('ACCESS_KEY_ID'),
      secret_access_key: ENV.fetch('SECRET_ACCESS_KEY'),
      s3_region: ENV.fetch('REGION'),
    }
  }

在哪里REGION = 'us-geo'

给出错误

Seahorse::Client::NetworkingError (Failed to open TCP connection to david-provest-movies.s3.us-geo.amazonaws.com:443 (getaddrinfo: Name or service not known)).


如何将 'david-provest-movies.s3.us-geo.amazonaws.com:443' 更改为所需的 'david-provest-movies.s3-api.us-geo.objectstorage.softlayer.net ' 网址?

API 链接: https://developer.ibm.com/recipes/tutorials/cloud-object-storage-s3-api-intro/

谢谢你:)

【问题讨论】:

    标签: ruby-on-rails amazon-s3 ibm-cloud paperclip object-storage


    【解决方案1】:

    这不是 s3 的有效区域。

    • us-east-2
    • us-west-1
    • us-west-2
    • ca-central-1
    • ap-south-1
    • ap-northeast-2
    • ap-southeast-1
    • ap-southeast-2
    • ap-northeast-1
    • eu-central-1
    • eu-west-1
    • eu-west-2
    • sa-east-1

    http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

    这是bluemix

    注意:使用第三方工具或 SDK 可能会在创建存储桶时强制设置“LocationConstraint”。如果需要,必须将此值设置为“us-standard”。与 AWS S3 不同,IBM COS 使用此值来指示对象的存储类别。此字段与自然地理或区域无关 - 这些值在用于连接到服务的端点内提供。目前,“LocationCostraint”的唯一允许值是“us-standard”、“us-vault”、“us-cold”、“us-flex”、“us-south-standard”、“us-south-vault” 、us-south-cold 和 'us-south-flex'。

    【讨论】:

    • 是的,谢谢,它是一个有效的 IBM Bluemix 区域,而不是 AWS。我想更改 URL 以指向“objectstorage.softlayer.net”的 IBM Bluemix 路径,这是他们的对象存储路径。
    • 我没有看到部分,抱歉。我对 bluemix 了解不多。
    • 大多数时候我看到 AWS sdk 中的错误是公共资源不存在、url 不正确或实例没有 dns 解析。
    • 谢谢,有道理。我认为应该有一个可以更改 URl 的 s3 凭据密钥。但我就是不知道它是什么。
    • 他们示例中的区域有区域:“us-standard”,端点:'s3-api.us-geo.objectstorage
    【解决方案2】:

    我实际上还没有尝试使用回形针,但这里的问题是需要指定 IBM Cloud 端点。我将仔细查看回形针文档,但它看起来类似于指定存储桶 URL(其中 {bucket-name} 在下面的 sn-p 中硬编码但可以构造)或其他一些方法显式指定主机名或根 URL。回形针有可能对 AWS 端点进行了硬编码,IBM 的团队需要提供一种方法来设置自定义端点 (which is fully supported in the aws-sdk gem when creating clients)。

    config.paperclip_defaults = {
        storage: :s3,
        s3_credentials: {
          bucket: ENV.fetch('S3_BUCKET_NAME'),
          access_key_id: ENV.fetch('ACCESS_KEY_ID'),
          secret_access_key: ENV.fetch('SECRET_ACCESS_KEY'),
          s3_region: ENV.fetch('REGION'),
          bucket_url: 'https://{bucket-name}.s3-api.us-geo.objectstorage.softlayer.net'
        }
      }
    

    如果使用显式存储桶 URL 似乎不起作用,请告诉我,我将研究端点是否在回形针中硬编码,以及我们可以做些什么来修复它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 2018-08-27
      相关资源
      最近更新 更多