3

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 はアプリのパフォーマンスを変更しますか?
4

2 に答える 2

0

S3 から直接画像を提供しています。ユーザーが世界のどこにいるかと、S3 バケットの地域によって、レイテンシと速度が異なる場合があります。

これを高速化する 1 つのオプションは、AWS Cloudfront CDN を使用し、S3 バケットをオリジン サーバーとして保持することです。

  1. Cloudfront と S3について読む
  2. ダーゴンフライでも参照
于 2014-02-25T13:50:38.787 に答える
0

私はしばらくこれに苦労してきました。残念ながら、きれいな解決策は見つかりませんでしたが、うまくいくもので終わりました。

独自の URL 文字列を作成すると、次のようになります。

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

これが誰かを助けることができることを願っています。

于 2020-04-20T08:02:00.623 に答える