温馨提示:本文翻译自stackoverflow.com,查看原文请点击:ruby on rails - Different URLs for downloading and uploading with paperclip on S3 storage
amazon-s3 ruby-on-rails paperclip localstack

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

发布于 2020-04-06 23:40:00

对于本地开发,我将具有以下Paperclip配置的localstack Docker容器用作AWS Sandbox:

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作为主机。

有什么提示可以看的吗?

查看更多

提问者
Sven R.
被浏览
97
Sven R. 2020-02-10 18:34

我找到了使它工作的方法。

向配置添加明确的端点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

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