在 S3 存储上使用回形针下载和上传的不同 URL
Different URLs for downloading and uploading with paperclip on S3 storage
对于本地开发,我使用 localstack Docker Container 作为 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',
}
下载内容的链接已正确生成并且有效:
但是当我想上传新文件时,我得到一个 Aws::Errors::NoSuchEndpointError 基于不同的 URL:
我搜索并调试了几个小时,但无法找到这个 url 的生成位置以及它为什么使用 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',
}
由于 AWS Gem 将使用存储桶名称重命名 url,因此生成的域将为 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
这不是很干净,但有效。也许我后来找到了更好的解决方法。
这可以帮助其他人。您可以在您的环境特定配置文件中更新 aws 配置。
Aws.config.update(
endpoint: 'http://localhost:4572',
force_path_style: true
)
对于本地开发,我使用 localstack Docker Container 作为 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',
}
下载内容的链接已正确生成并且有效:
但是当我想上传新文件时,我得到一个 Aws::Errors::NoSuchEndpointError 基于不同的 URL:
我搜索并调试了几个小时,但无法找到这个 url 的生成位置以及它为什么使用 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',
}
由于 AWS Gem 将使用存储桶名称重命名 url,因此生成的域将为 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
这不是很干净,但有效。也许我后来找到了更好的解决方法。
这可以帮助其他人。您可以在您的环境特定配置文件中更新 aws 配置。
Aws.config.update(
endpoint: 'http://localhost:4572',
force_path_style: true
)