对于本地开发,我将具有以下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',
}
正确生成了下载内容的链接,并且可以正常工作:
但是,当我要上传新文件时,会基于另一个URL出现Aws :: Errors :: NoSuchEndpointError:
我搜索并调试了几个小时,但找不到该网址的生成位置以及为什么使用amazonaws.com作为主机。
有什么提示可以看的吗?
我找到了使它工作的方法。
向配置添加明确的端点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
这不是很干净,但是可以。也许以后我找到了更好的工作。