ruby-on-rails 在S3存储上使用回形针下载和上传的不同URL

osh3o9ms  于 12个月前  发布在  Ruby
关注(0)|答案(2)|浏览(110)

对于本地开发,我使用localstack Docker容器作为AWS Sandbox,并使用此Paperclip配置:

config.paperclip_defaults = {
  storage:        :s3,
  s3_credentials: {
    access_key_id:     ENV['AWS_ACCESS_KEY_ID'],
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
  },
  bucket:         'my-development',
  s3_region:      'localhost-region',
  s3_host_name:   'localhost:4572',
  url:            ':s3_path_url',
}

下载内容的链接已正确生成并正常工作:
http://localhost:4572/my-development/files/downloads/be-fl-che-spezialtiefbau-mischanlage-750_ae0f1c99d8.pdf
但是当我想上传新文件时,我会得到一个基于不同URL的 Aws::Errors::NoSuchEndpointError
https://my-development.s3.localhost-region.amazonaws.com/files/downloads/_umschlag-vorlage_c534f5f25e.pdf
我搜索和调试了几个小时,但无法找到这个网址是在哪里生成的,为什么它使用 * amazonaws.com * 作为主机。
有什么线索可以看吗?

acruukt9

acruukt91#

我找到了让它工作的方法。
将显式端点URL添加到配置

# config/environments/development.rb
config.paperclip_defaults = {
  storage:        :s3,
  s3_credentials: {
    access_key_id:     ENV['AWS_ACCESS_KEY_ID'],
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
  },
  s3_options:     {
    endpoint: 'http://localhost:4572/my-development',
  },
  bucket:         'my-development',
  s3_region:      'localhost-region',
  s3_host_name:   'localhost:4572',
  url:            ':s3_path_url',
}

由于URL将由AWS Gem使用存储桶名称重命名,因此生成的域将为my-development.localhost。我没有找到任何其他的解决方案,除了将这个子域添加到我的/etc/hosts

127.0.0.1   localhost
127.0.0.1   my-development.localhost
255.255.255.255 broadcasthost
::1             localhost
::1             my-development.localhost

这不是很干净,但工作。也许我以后会找到更好的工作。

cfh9epnr

cfh9epnr2#

这可以帮助其他人。你可以在你的环境配置文件中更新aws配置。

Aws.config.update(
    endpoint: 'http://localhost:4572',
    force_path_style: true
  )

相关问题