【问题标题】:Rails Active Storage push to DigitalOcean SpacesRails Active Storage 推送到 DigitalOcean Spaces
【发布时间】:2019-04-09 17:55:18
【问题描述】:

您好,我正在尝试将活动存储推送到 DigitalOcean 空间。但是,我发现推送 url 正在更改为 amazonaws.com,即使我已将端点定义为数字海洋。

这是我在 storage.yml 中的内容

amazon:
  service: S3
  access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
  secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
  region: sfo2
  bucket: redacted_bucket_name
  endpoint: https://sfo2.digitaloceanspaces.com

当我尝试上传文件时,我收到以下错误:

Aws::Errors::NoSuchEndpointError (Encountered a `SocketError` while attempting to connect to:

  https://redacted_bucket_name.s3.sfo2.amazonaws.com/a8278561714955c23ee99

在我的 gemfile 中,我有:gem 'aws-sdk-s3

我已按照找到的说明进行操作 here,但我仍然收到错误消息。有没有可能有一种新的方法来做到这一点?

【问题讨论】:

    标签: ruby-on-rails rails-activestorage


    【解决方案1】:

    几天前我自己设置了这样的东西。当您检查 URL https://redacted_bucket_name.s3.sfo2.amazonaws.com/a8278561714955c23ee99 时,它与您设置的实际端点 https://redacted_bucket_name.sfo2.amazonaws.com/a8278561714955c23ee99 不同

    错误是由您点击的无效端点引起的,.sfo2 之前的 s3 正在偏移端点。您是否碰巧将s3 添加到您的空间配置中?检查您的空间仪表板并尝试正确设置端点。

    【讨论】:

      【解决方案2】:

      在 Ubuntu 20.04 中开发 Rails 6 应用程序时,我遇到了同样的挑战。

      这是我的修复方法

      首先,在您的数字海洋控制台中创建 Spaces 访问密钥。这个链接应该有帮助 - DigitalOcean Spaces API

      其次,在 config/storage.yml 文件中为 DigitalOcean Spaces 添加新配置。在local 存储定义之后:

      # Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
      digital_ocean:
        service: S3
        access_key_id: <%= SPACES_ACCESS_KEY_ID %>
        secret_access_key: <%= SPACES_SECRET_ACCESS_KEY %>
        region: <%= SPACES_REGION %>
        bucket: <%= SPACES_BUCKET_NAME %>
        endpoint: <%= SPACES_ENDPOINT %>
      

      注意:您可以为您的条目指定任何名称,例如digital_ocean_spaces 或其他名称。对我来说,我将其命名为digital_ocean

      第三,修改config/environments/production.rb文件中的config.active_storage.service配置:

      config.active_storage.service = :local
      

      config.active_storage.service = :digital_ocean
      

      最后,在config/application.yml 文件(如果您使用Figaro gem)或.env 文件中指定这些环境变量文件。 (如果您使用的是 dotenv gem)。就我而言,我使用的是 dotenv gem,所以我的 .env 文件看起来像这样:

      SPACES_ACCESS_KEY_ID=E4TFWVPDBLRTLUNZEIFMR
      SPACES_SECRET_ACCESS_KEY=BBefjTJTFHYVNThun7GUPCeT2rNDJ4UxGLiSTM70Ac3NR
      SPACES_REGION=nyc3
      SPACES_BUCKET_NAME=my-spaces
      SPACES_ENDPOINT=https://nyc3.digitaloceanspaces.com
      

      就是这样。

      我希望这会有所帮助

      【讨论】:

        猜你喜欢
        • 2022-11-28
        • 2019-08-31
        • 2020-11-04
        • 2021-04-07
        • 2018-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-27
        相关资源
        最近更新 更多