Rails Active Storage 推送到 DigitalOcean Spaces

Rails Active Storage push to DigitalOcean Spaces

您好,我正在尝试获取活动存储以推送到 DigitalOcean space。但是,我发现推送 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,但我仍然遇到错误。有没有可能有新的方法来做到这一点?

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

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

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

这是我修复我的方法:

首先,在您的数字海洋控制台中创建一个 Spaces 访问密钥。这个 link 应该有帮助 - 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

就这些了。

希望对您有所帮助