簡體   English   中英

遠程或直接在 Amazon S3 上提供圖像 - Dragonfly Gem

[英]Serving images remotely or directly the Amazon S3 - Dragonfly Gem

我在 Heroku 上有一個應用程序,我正在使用 Amazon S3 來存儲圖像。 我已經使用了我知道的所有緩存技術,但似乎圖像加載速度太慢,並且讓一些用戶望而卻步。

目前用戶得到

/media/W1siZiIsIjIwMTQvMDIvMjEvMjMvMjAvMDQvNTY1L01pa2VfOTIzMi5qcGciXV0/Mike_150.jpg?sha=d8993be2

根據說明,必須使用

Dragonfly.app.remote_url_for(uid)

他們會得到

http://my-bucket.s3.amazonaws.com/2011/04/01/03/03/05/243/file.jpg

但是,當我添加這一行時,沒有任何反應。

#require 'dragonfly/s3_data_store'
require 'dragonfly'

# Configure
Dragonfly.app.configure do
  plugin :imagemagick

  protect_from_dos_attacks true
  secret "2558d89a83f18f6da793e3b6dccc888c17642563e9ddedf456356f4c2d79"

  url_format '/media/:job/:name'


  response_header 'Cache-Control', 'public, max-age=3600'                    # You can set custom response headers
  response_header 'Cache-Control' do |job, request, headers|    # either directly or with a block
    job.image? ? "public, max-age=10000000" : "private"         # setting to nil removes the header
  end


  allow_legacy_urls true


  if Rails.env.test? || Rails.env.development?
    datastore :file,
              root_path: Rails.root.join('public/system/dragonfly', Rails.env),
              server_root: Rails.root.join('public')
  else
    datastore :s3,
              bucket_name: ENV['S3_BUCKET_NAME'],
              access_key_id: ENV['S3_KEY'],
              secret_access_key: ENV['S3_SECRET'],
              url_scheme: 'http',
              url_host: 'mybucket.s3.amazonaws.com'

  end

end


# Logger
Dragonfly.logger = Rails.logger

Dragonfly.app.remote_url_for(uid)

# Mount as middleware
Rails.application.middleware.use Dragonfly::Middleware

# Add model functionality
if defined?(ActiveRecord::Base)
  ActiveRecord::Base.extend Dragonfly::Model
  ActiveRecord::Base.extend Dragonfly::Model::Validations
end
  • 我究竟做錯了什么?
  • 服務文件遠程 url 會改變應用程序的性能嗎?

您直接從 S3 提供圖像。 根據您的用戶所在的世界與 S3 存儲桶的區域,延遲和速度可能會有所不同。

加快速度的一種選擇是使用 AWS Cloudfront CDN 並將 S3 存儲桶保留為源服務器。

  1. 了解Cloudfront 和 S3
  2. 也在Dargonfly 中引用

一段時間以來,我一直在為此苦苦掙扎。 不幸的是,我還沒有找到一個干凈的解決方案,但我最終得到了一些有效的解決方案。

編寫您自己的 url 字符串可以完成這項工作:

url = 'https://YOURBUCKET.s3.eu-central-1.amazonaws.com/' + picture.image_file_uid

我希望這可以幫助某人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM