无法让 Paperclip 正确设置我的 S3 URL
Can't get Paperclip to set my S3 URLs properly
我在 Rails 4 应用程序中使用回形针和 aws-sdk gem。
我在 paperclip.rb 配置中定义了 :path 选项,没有 :url 选项:
Paperclip::Attachment.default_options[:path] = ":class/:attachment/:id_partition/:style/:filename"
它会像这样保存我上传的图片:
很好,它已保存到 S3。但是它拒绝让我阅读要显示的图像,例如=profile.avatar.url(:中等)。当我在浏览器中转到 URL 时,它告诉我使用存储桶名称作为域重新格式化它。喜欢:
好的,也不是问题。我去那个URL,我可以查看我的图像。所以现在我需要弄清楚如何让 Paperclip 像这样自动格式化 URLs。我在 Paperclip 文档中读到,您只需设置
Paperclip::Attachment.default_options[:url] = ":s3_domain_url"
而且我还必须设置 :path 参数,否则我只会得到一个 Paperclip::Errors::InfiniteInterpolationError。
所以我设置了我的配置文件:
Paperclip::Attachment.default_options[:path] = ":class/:attachment/:id_partition/:style/:filename"
Paperclip::Attachment.default_options[:url] = ":s3_domain_url"
不工作...我尝试废弃 paperclip.rb 并将其放入 config/environments/* 但无论我做什么,它仍然保存没有域的 URLs在路径中使用存储桶名称。
所以两个问题:
1) 如何让 Paperclip 以域样式自动格式化保存的 URLs?
2) 或者更好的是,我怎样才能让 S3 接受非域样式 URLs,Paperclip 当前正在生成的样式?
编辑
所以,如果我添加 s3_host_name 选项,那么它会保存 URLs 域样式。所以我必须拥有所有 3 个:
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = ":class/:attachment/:id_partition/:style/:filename"
Paperclip::Attachment.default_options[:s3_host_name] = 's3-us-west-2.amazonaws.com'
它会像这样在模型上保存我的 URLs:
但现在我看到我在 URL 中有一个 %3F 编码(“?”),这把它搞砸了。
好吧,正如上面更新中提到的,为了让 Paperclip 保存域样式的 URL,我必须在我的 paperclip.rb 中包含以下所有 3 个:
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = ":class/:attachment/:id_partition/:style/:filename"
Paperclip::Attachment.default_options[:s3_host_name] = 's3-us-west-2.amazonaws.com'
我认为最近的 gem 升级存在一个相关问题,这会生成其编码无法自行运行的 URL。
所以在我看来我不得不添加 URI.unescape,比如
=image_tag URI.unescape(profile.avatar.url(:medium))
我还可以在模型上设置回调以将 %3F 替换为“?”保存前。
Paperclip 出现奇怪问题...不确定发生了什么。我开发的第一个应用遇到了这个问题。
在paperclip.rb
Paperclip::Attachment.default_options[:s3_host_name] = 's3-ap-south-1.amazonaws.com'
在production.rb
config.paperclip_defaults = {
storage: :s3,
s3_protocol: :https,
s3_credentials: {
bucket: ENV.fetch('S3_BUCKET_NAME'),
access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
s3_region: ENV.fetch('AWS_REGION')
}
这对我 image_tag 来说非常有效。它应该也适合你。
我在 Rails 4 应用程序中使用回形针和 aws-sdk gem。
我在 paperclip.rb 配置中定义了 :path 选项,没有 :url 选项:
Paperclip::Attachment.default_options[:path] = ":class/:attachment/:id_partition/:style/:filename"
它会像这样保存我上传的图片:
很好,它已保存到 S3。但是它拒绝让我阅读要显示的图像,例如=profile.avatar.url(:中等)。当我在浏览器中转到 URL 时,它告诉我使用存储桶名称作为域重新格式化它。喜欢:
好的,也不是问题。我去那个URL,我可以查看我的图像。所以现在我需要弄清楚如何让 Paperclip 像这样自动格式化 URLs。我在 Paperclip 文档中读到,您只需设置
Paperclip::Attachment.default_options[:url] = ":s3_domain_url"
而且我还必须设置 :path 参数,否则我只会得到一个 Paperclip::Errors::InfiniteInterpolationError。
所以我设置了我的配置文件:
Paperclip::Attachment.default_options[:path] = ":class/:attachment/:id_partition/:style/:filename"
Paperclip::Attachment.default_options[:url] = ":s3_domain_url"
不工作...我尝试废弃 paperclip.rb 并将其放入 config/environments/* 但无论我做什么,它仍然保存没有域的 URLs在路径中使用存储桶名称。
所以两个问题:
1) 如何让 Paperclip 以域样式自动格式化保存的 URLs?
2) 或者更好的是,我怎样才能让 S3 接受非域样式 URLs,Paperclip 当前正在生成的样式?
编辑
所以,如果我添加 s3_host_name 选项,那么它会保存 URLs 域样式。所以我必须拥有所有 3 个:
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = ":class/:attachment/:id_partition/:style/:filename"
Paperclip::Attachment.default_options[:s3_host_name] = 's3-us-west-2.amazonaws.com'
它会像这样在模型上保存我的 URLs:
但现在我看到我在 URL 中有一个 %3F 编码(“?”),这把它搞砸了。
好吧,正如上面更新中提到的,为了让 Paperclip 保存域样式的 URL,我必须在我的 paperclip.rb 中包含以下所有 3 个:
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = ":class/:attachment/:id_partition/:style/:filename"
Paperclip::Attachment.default_options[:s3_host_name] = 's3-us-west-2.amazonaws.com'
我认为最近的 gem 升级存在一个相关问题,这会生成其编码无法自行运行的 URL。
所以在我看来我不得不添加 URI.unescape,比如
=image_tag URI.unescape(profile.avatar.url(:medium))
我还可以在模型上设置回调以将 %3F 替换为“?”保存前。
Paperclip 出现奇怪问题...不确定发生了什么。我开发的第一个应用遇到了这个问题。
在paperclip.rb
Paperclip::Attachment.default_options[:s3_host_name] = 's3-ap-south-1.amazonaws.com'
在production.rb
config.paperclip_defaults = {
storage: :s3,
s3_protocol: :https,
s3_credentials: {
bucket: ENV.fetch('S3_BUCKET_NAME'),
access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
s3_region: ENV.fetch('AWS_REGION')
}
这对我 image_tag 来说非常有效。它应该也适合你。