- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在后台作业中使用 Rails 和 Carrierwave 将许多小文件上传到 S3,并且达到了 S3 速率限制。我的直接想法是放一个 sleep 0.1
在每次上传之前,但这似乎不是一个很好的解决方案。
关于如何通过 S3 API 和某种类型的退避来处理这个问题的任何建议?
正在执行上传的 Ruby 代码,此方法在循环中被调用数千次:
def attach_audio(object:, audio_field:, attachment:)
return true if Rails.env.test?
language_code, voice_id = language_and_voice(object)
resp = polly.synthesize_speech(
output_format: 'mp3',
voice_id: voice_id,
text: audio_field.to_s,
language_code: language_code
)
audio_filename = "#{object.class.to_s.downcase}_#{attachment}_#{object.id}_#{voice_id}.mp3"
audio_path = "#{Rails.root}/db/audio/#{audio_filename}"
IO.copy_stream(resp.audio_stream, audio_path)
object.send(attachment + '=', Pathname.new(audio_path).open)
object.save!
end
上传类
class AudioUploader < BaseUploader
def store_dir
"uploads/audio/#{model.target_language}/#{self.class.to_s.underscore}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def extension_whitelist
%w[mp3]
end
end
class BaseUploader < CarrierWave::Uploader::Base
if Rails.env.test?
storage :file
else
storage :fog
end
def store_dir
"uploads/#{self.class.to_s.underscore}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
来自 AWS 的回应
Message
Excon::Error::ServiceUnavailable: Expected(200) <=> Actual(503 Service Unavailable) excon.error.response :body => "<Error><Code>SlowDown</Code><Message>Please reduce your request rate.</Message><RequestId>176C22715A856A29</RequestId><HostId>L/+
Traceback
Excon::Error::ServiceUnavailable: Expected(200) <=> Actual(503 Service Unavailable)
excon.error.response
:body => "<Error><Code>SlowDown</Code><Message>Please reduce your request rate.</Message><RequestId>176C22715A856A29</RequestId><HostId>xxxxxxxxxxxxxxxxxxxxxxxxx</HostId></Error>"
:cookies => [
]
:headers => {
"Connection" => "close"
"Content-Type" => "application/xml"
"Date" => "Wed, 18 Nov 2020 07:31:29 GMT"
"Server" => "AmazonS3"
"x-amz-id-2" => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
"x-amz-request-id" => "176C22715A856A29"
}
:host => "example-production.s3-eu-west-1.amazonaws.com"
:local_address => "xxx.xx.xxx.xxx"
:local_port => 50276
:path => "/uploads/audio/fr/audio_uploader/word/audio_file/8015423/word_audio_file_8015423_Mathieu.mp3"
:port => 443
:reason_phrase => "Slow Down"
:remote_ip => "xx.xxx.xx.x"
:status => 503
:status_line => "HTTP/1.1 503 Slow Down\r\n"
File "/app/vendor/bundle/ruby/2.6.0/gems/excon-0.71.1/lib/excon/middlewares/expects.rb", line 13, in response_call
File "/app/vendor/bundle/ruby/2.6.0/gems/excon-0.71.1/lib/excon/middlewares/response_parser.rb", line 12, in response_call
File "/app/vendor/bundle/ruby/2.6.0/gems/excon-0.71.1/lib/excon/connection.rb", line 448, in response
File "/app/vendor/bundle/ruby/2.6.0/gems/excon-0.71.1/lib/excon/connection.rb", line 279, in request
File "/app/vendor/bundle/ruby/2.6.0/gems/fog-xml-0.1.3/lib/fog/xml/sax_parser_connection.rb", line 35, in request
etc
编辑
Amazon S3 automatically scales to high request rates. For example, your application can achieve at least 3,500 PUT/COPY/POST/DELETE or 5,500 GET/HEAD requests per second per prefix in a bucket. There are no limits to the number of prefixes in a bucket. You can increase your read or write performance by parallelizing reads. For example, if you create 10 prefixes in an Amazon S3 bucket to parallelize reads, you could scale your read performance to 55,000 read requests per second.
最佳答案
来自 here
For example, your application can achieve at least 3,500PUT/COPY/POST/DELETE or 5,500 GET/HEAD requests per second per prefixin a bucket.
/uploads/audio/fr/audio_uploader/word/audio_file/8015423/word_audio_file_8015423_Mathieu.mp3
/uploads/audio/fr/audio_uploader/word/audio_file/8015423
/uploads/audio/fr/audio_uploader/word/audio_file/8015423/word_audio_file_8015423_Mathieu.mp3
/uploads/audio/fr/audio_uploader/word/audio_file/00/8015423/word_audio_file_8015423_Mathieu.mp3
关于ruby-on-rails - 503 使用 Carrierwave 上传到 S3 时速度变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64889126/
我正在通过 Carrierwave 上传的裁剪图像的能力。这里是 RailsCast video on Youtube我正在关注的。 但是在上传器中包含 RMagick 后,我收到了: undefin
我正在尝试下载这个 image使用 CarrierWave 但它一直给出此异常: CarrierWave::IntegrityError 我的下载适用于许多图像,但不适用于该特定域。 我看过这个doc
我正在寻找在 Heroku 上的 Rails 应用程序中上传文件的最佳方式。设置:Rails 3、Carrierwave、Heroku、Mongoid 问题:偶尔,当用户上传不同大小的文件时,图像会保
嗨我只是无法找出我的代码有什么问题。我有两个模型 Items 和 Images 以及它们之间的关系 class Item :destroy accepts_nested_attributes_
我实际上是在 Railscast 383 中编写项目- 第二部分,当照片直接上传到 AWS S3 时,然后由 Sidekiq 在后台处理照片以创建照片的缩略图版本。我在 Rails 4 上。 我的问题
我正在尝试使用 Carrierwave 通过 Rails 应用程序将 Logo 图像上传到 Amazon s3 存储桶。但我的文件上传没有将文件读取为 HTTP 文件,并将 NULL 添加到数据库中。
问题是在 mongoids save! 操作中抛出的以下错误。 Mongoid::Errors::Validations: Validation failed - Img failed to be p
我试图在我的 Rails 3.2 应用程序中显示默认图像。我已按照 Carrierwave github 页面上的说明进行操作,并浏览了几篇 Stackoverflow 帖子。但是,出于某种原因,它仍
模型带有图像的远程 url,这意味着它不是在 Rails 中创建的 db 条目。然后第一次从Rails中的DB中获取我想检测图像尚未上传,为图像url分配remote_seed_url并保存!触发 C
Carrierwave 运行良好,我将目录移出公众(出于安全原因),当我尝试上传图像时出现此错误: Errno::EACCES in PostsController#create Permission
我正在使用carrierwave,但遇到了这个问题: 假设一旦项目交付,您需要添加一个部分,其中系统中的图像需要以不同的尺寸显示。我不想为系统中已有的每个图像重新生成新维度。我希望能够在 View 需
是否可以让 CarrierWave 在数据库中存储上传文件的完整路径,而不仅仅是文件名,并在每次访问时重新生成它们? 我希望这样做的原因是能够更改我存储文件的结构,而不会在已上传的文件移动到新位置之前
我正在使用来自主分支和 PostgreSQL 的多个文件上传 我的产品模型有一个名为“images”的字符串字段,我可以很好地附加多个图像。 但是我不知道的是,如何从产品中删除一张图片? 我可以删除文
我有一个允许的文件扩展名列表 def extension_white_list %w(pdf doc docx xls xlsx html tif gif jpg jpeg png bmp rtf
所以,我有一个购物车类,我一直保存在 session 中,直到购买完成,我需要能够在购买完成后将文件上传到购物车(不要问为什么,说来话长),我将所有这些信息转储到一个保存在数据库中的类中。 我经常使用
我正在使用carrierwave 和rmagick 来处理我的图片上传。我现在向 image_uploader.eb 添加了一个新版本(smallthumb): class ImageUploader
我知道我在这里错过了一些非常简单的东西...... CarrierWave::Storage::Fog::File有一个方法 exists ? 我如何使用它?我只是想检查远程存储上是否存在以前上传的文
我正在使用乘客和 capistrano 部署我的第一个 rails 应用程序。 一切都很好,直到我尝试在浏览器中启动应用程序时遇到此错误。 Error message: uninitialize
我有一个使用 CarrierWave gem 的 rails 3 应用程序。到目前为止,我已经上传了 48*48 和 100*100 的图片,但现在我想将它们存储在 200*200 中。 有没有办法调
我有两个模型,每个模型都有自己的 Carrierwave 上传器: class User < ActiveRecord::Base mount_uploader :avatar, AvatarUp
我是一名优秀的程序员,十分优秀!