我在Heroku上使用独角兽。我遇到的一个问题是文件上传。我们使用carrierwave进行上传,基本上,即使对于大小约为2MB的文件,在完成50-60%的上传时,Unicorn也会超时。
我们在本地测试时没有使用独角兽,我在本地没有任何大文件问题(尽管文件使用carrierwave上传到AWS,就像生产+登台一样)。然而,在舞台上和生产服务器,我看到我们得到了超时。
有关解决此问题的任何策略?我不确定我是否可以将此文件上传到延迟的作业上(因为我需要向我的用户确认该文件确实已成功上传)。
谢谢! 林檎
答案 0 :(得分:2)
如果您通过Heroku将大文件上传到S3,则无法合理地避免超时。如果有人决定上传一个大文件,它就会超时。如果上传到Heroku需要超过30秒,转移到S3并进行处理,请求将超时。也有充分的理由,30秒的请求只是糟糕的表现。
此博文(和github repo)非常有用:http://pjambet.github.io/blog/direct-upload-to-s3/
有了它,您应该能够直接进行s3文件上传工作。您完全避免在大量上传中使用Heroku。使用jquery-fileupload的回调,您可以在文件成功上传后发布到您的应用程序,并使用delayed_job在后台处理它。向用户确认上传成功是您需要处理的应用程序问题。
答案 1 :(得分:0)
听起来你的超时设置得太低了。你的独角兽配置是什么样的?
请参阅https://devcenter.heroku.com/articles/rails-unicorn以获得良好的起点。