Rails Active Storage推向DigitalOcean Spaces

时间:2019-04-09 17:55:18

标签: ruby-on-rails rails-activestorage

嗨,我正在尝试获得活动存储以推送至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中找到的说明进行操作,但仍然出现错误。可能有一种新的方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:0)

几天前,我刚刚设置了类似的设置。当您检查URL https://redacted_bucket_name.s3.sfo2.amazonaws.com/a8278561714955c23ee99时,它与您设置的https://redacted_bucket_name.sfo2.amazonaws.com/a8278561714955c23ee99的实际端点不同。

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

答案 1 :(得分:0)

在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.active_storage.service文件中的config/environments/production.rb配置:

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

仅此而已。

我希望这会有所帮助