2015-07-13 126 views
0

我在Heroku与Postgres的爱好基本的数据库爱好计划后超时。当我使用导入Amazon S3的载波宝石上传图像时,服务器超时。上传将发生,但需要一段时间才能处理。如果我上传一张照片或四张相同的问题。服务器上传照片

是否有人知道我能做些什么来解决这个问题?创建照片时,会创建8个不同大小的版本,因为我在整个应用中使用了不同形状的照片。

我包括下面的日志。

Jul 12 20:31:27 domain app/web.1: Processing by PhotosController#create as JS 
Jul 12 20:31:27 domain app/web.1: Parameters: {"utf8"=>"✓", "authenticity_token"=>"M/h0eb77xtTjaeex2yi+rOPV+N2OA/nSd6X8HA69xyg=", "photo"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007fb9c1a6fce8 @tempfile=#<Tempfile:/tmp/RackMultipart20150713-3-19cl8ow>, @original_filename="1.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"photo[image]\"; filename=\"1.jpg\"\r\nContent-Type: image/jpeg\r\n">}} 
Jul 12 20:31:27 domain app/web.1: Processing by PhotosController#create as JS 
Jul 12 20:31:27 domain app/web.1: Parameters: {"utf8"=>"✓", "authenticity_token"=>"M/h0eb77xtTjaeex2yi+rOPV+N2OA/nSd6X8HA69xyg=", "photo"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007fb9c1a6fce8 @tempfile=#<Tempfile:/tmp/RackMultipart20150713-3-19cl8ow>, @original_filename="1.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"photo[image]\"; filename=\"1.jpg\"\r\nContent-Type: image/jpeg\r\n">}} 
Jul 12 20:31:27 domain app/web.1: Started POST "/photos" for 73.54.214.248 at 2015-07-13 03:31:27 +0000 
Jul 12 20:31:27 domain app/web.1: Started POST "/photos" for 73.54.214.248 at 2015-07-13 03:31:27 +0000 
Jul 12 20:31:27 domain app/web.1: Started POST "/photos" for 73.54.214.248 at 2015-07-13 03:31:27 +0000 
Jul 12 20:31:27 domain app/web.1: Processing by PhotosController#create as JS 
Jul 12 20:31:27 domain app/web.1: Parameters: {"utf8"=>"✓", "authenticity_token"=>"M/h0eb77xtTjaeex2yi+rOPV+N2OA/nSd6X8HA69xyg=", "photo"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007fb9c1cc5c90 @tempfile=#<Tempfile:/tmp/RackMultipart20150713-3-1rfxaqg>, @original_filename="2.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"photo[image]\"; filename=\"2.jpg\"\r\nContent-Type: image/jpeg\r\n">}} 
Jul 12 20:31:27 domain app/web.1: Parameters: {"utf8"=>"✓", "authenticity_token"=>"M/h0eb77xtTjaeex2yi+rOPV+N2OA/nSd6X8HA69xyg=", "photo"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007fb9c1cc5c90 @tempfile=#<Tempfile:/tmp/RackMultipart20150713-3-1rfxaqg>, @original_filename="2.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"photo[image]\"; filename=\"2.jpg\"\r\nContent-Type: image/jpeg\r\n">}} 
Jul 12 20:31:27 domain app/web.1: Started POST "/photos" for 73.54.214.248 at 2015-07-13 03:31:27 +0000 
Jul 12 20:31:27 domain app/web.1: Started POST "/photos" for 73.54.214.248 at 2015-07-13 03:31:27 +0000 
Jul 12 20:31:27 domain app/web.1: Started POST "/photos" for 73.54.214.248 at 2015-07-13 03:31:27 +0000 
Jul 12 20:31:27 domain app/web.1: Started POST "/photos" for 73.54.214.248 at 2015-07-13 03:31:27 +0000 
Jul 12 20:31:27 domain app/web.1: Started POST "/photos" for 73.54.214.248 at 2015-07-13 03:31:27 +0000 
Jul 12 20:31:27 domain app/web.1: Processing by PhotosController#create as JS 
Jul 12 20:31:28 domain app/web.1: Attempting to optimize a jpeg without jpegoptim installed. Skipping... 
Jul 12 20:31:29 domain app/web.1: Processing by PhotosController#create as JS 
Jul 12 20:31:29 domain app/web.1: Attempting to optimize a jpeg without jpegoptim installed. Skipping... 
Jul 12 20:31:29 domain app/web.1: Processing by PhotosController#create as JS 
Jul 12 20:31:29 domain app/web.1: Parameters: {"utf8"=>"✓", "authenticity_token"=>"M/h0eb77xtTjaeex2yi+rOPV+N2OA/nSd6X8HA69xyg=", "photo"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007fb9c1deaf80 @tempfile=#<Tempfile:/tmp/RackMultipart20150713-3-8t5ly3>, @original_filename="5.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"photo[image]\"; filename=\"5.jpg\"\r\nContent-Type: image/jpeg\r\n">}} 
Jul 12 20:31:29 domain app/web.1: Parameters: {"utf8"=>"✓", "authenticity_token"=>"M/h0eb77xtTjaeex2yi+rOPV+N2OA/nSd6X8HA69xyg=", "photo"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007fb9c1deaf80 @tempfile=#<Tempfile:/tmp/RackMultipart20150713-3-8t5ly3>, @original_filename="5.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"photo[image]\"; filename=\"5.jpg\"\r\nContent-Type: image/jpeg\r\n">}} 
Jul 12 20:31:29 domain app/web.1: Processing by PhotosController#create as JS 
Jul 12 20:31:29 domain app/web.1: Processing by PhotosController#create as JS 
Jul 12 20:31:30 domain app/web.1: Parameters: {"utf8"=>"✓", "authenticity_token"=>"M/h0eb77xtTjaeex2yi+rOPV+N2OA/nSd6X8HA69xyg=", "photo"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007fb9c1e7c750 @tempfile=#<Tempfile:/tmp/RackMultipart20150713-3-12sz8qi>, @original_filename="3.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"photo[image]\"; filename=\"3.jpg\"\r\nContent-Type: image/jpeg\r\n">}} 
Jul 12 20:31:30 domain app/web.1: Parameters: {"utf8"=>"✓", "authenticity_token"=>"M/h0eb77xtTjaeex2yi+rOPV+N2OA/nSd6X8HA69xyg=", "photo"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007fb9c1e7c750 @tempfile=#<Tempfile:/tmp/RackMultipart20150713-3-12sz8qi>, @original_filename="3.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"photo[image]\"; filename=\"3.jpg\"\r\nContent-Type: image/jpeg\r\n">}} 
Jul 12 20:31:31 domain app/web.1: Processing by PhotosController#create as JS 
Jul 12 20:31:31 domain app/web.1: Parameters: {"utf8"=>"✓", "authenticity_token"=>"M/h0eb77xtTjaeex2yi+rOPV+N2OA/nSd6X8HA69xyg=", "photo"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007fb9c1d0c820 @tempfile=#<Tempfile:/tmp/RackMultipart20150713-3-28n50x>, @original_filename="4.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"photo[image]\"; filename=\"4.jpg\"\r\nContent-Type: image/jpeg\r\n">}} 
Jul 12 20:31:31 domain app/web.1: Parameters: {"utf8"=>"✓", "authenticity_token"=>"M/h0eb77xtTjaeex2yi+rOPV+N2OA/nSd6X8HA69xyg=", "photo"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007fb9c1d0c820 @tempfile=#<Tempfile:/tmp/RackMultipart20150713-3-28n50x>, @original_filename="4.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"photo[image]\"; filename=\"4.jpg\"\r\nContent-Type: image/jpeg\r\n">}} 
Jul 12 20:31:31 domain app/web.1: Processing by PhotosController#create as JS 
Jul 12 20:31:31 domain app/web.1: Attempting to optimize a jpeg without jpegoptim installed. Skipping... 
Jul 12 20:31:34 domain app/web.1: Attempting to optimize a jpeg without jpegoptim installed. Skipping... 
Jul 12 20:31:39 domain app/web.1: Attempting to optimize a jpeg without jpegoptim installed. Skipping... 
Jul 12 20:31:57 domain heroku/router: at=error code=H12 desc="Request timeout" method=POST path="/photos" host=domain.com request_id=461e639a-52d9-423d-9159-425b6422dc63 fwd="73.54.214.248" dyno=web.1 connect=0ms service=30163ms status=503 bytes=0 
Jul 12 20:31:57 domain heroku/router: at=error code=H12 desc="Request timeout" method=POST path="/photos" host=domain.com request_id=93120ab9-e570-45b3-b663-a8635355c0b3 fwd="73.54.214.248" dyno=web.1 connect=1ms service=30220ms status=503 bytes=0 
Jul 12 20:31:57 domain heroku/router: at=error code=H12 desc="Request timeout" method=POST path="/photos" host=domain.com request_id=a754387c-96eb-419b-a35b-8d67f3451c4e fwd="73.54.214.248" dyno=web.1 connect=1ms service=30324ms status=503 bytes=0 
Jul 12 20:31:57 domain heroku/router: at=error code=H12 desc="Request timeout" method=POST path="/photos" host=domain.com request_id=e17842ef-1a80-43ef-8594-bd67d924c0fd fwd="73.54.214.248" dyno=web.1 connect=1ms service=30283ms status=503 bytes=0 
Jul 12 20:31:57 domain heroku/router: at=error code=H12 desc="Request timeout" method=POST path="/photos" host=domain.com request_id=a0bb9be3-49a7-4d19-a098-fa51dd59655d fwd="73.54.214.248" dyno=web.1 connect=1ms service=30257ms status=503 bytes=0 
Jul 12 20:32:00 domain app/web.1: Started POST "/photos" for 73.54.214.248 at 2015-07-13 03:31:59 +0000 
Jul 12 20:32:00 domain app/web.1: Started POST "/photos" for 73.54.214.248 at 2015-07-13 03:31:59 +0000 
Jul 12 20:32:10 domain heroku/router: at=info method=POST path="/photos" host=domain.com request_id=593a9d5c-0ca0-41fe-a831-85e2ef023591 fwd="73.54.214.248" dyno=web.1 connect=1ms service=12581ms status=500 bytes=835 
Jul 12 20:32:10 domain app/web.1: ActiveRecord::ConnectionTimeoutError (could not obtain a database connection within 5.000 seconds (waited 5.078 seconds)): 
+0

你能后处理上载的方法?我可以安全地假设您不会将“上传到S3”逻辑派发给后台工作者吗? – elithrar

回答

2

是的,请参阅heroku/router日志,其中指出请求花费的时间超过30秒。 Heroku要求你在30秒内返回 - see this article解释这一切。

我建议直接到S3上传(或许真的like this),然后使用一个后台工作下载/处理/上传。那么你并不是毫无必要地绑定了一个网络连接,而你将拥有更多的可扩展解决方案。

+0

谢谢你的解决方案,绝对会听从这一建议。 –