2012-09-19 150 views
1

我讀過很多關於在Rails中上傳文件的區域,導致Web應用程序掛起,我想知道這是Heroku Dyno的情況嗎?如果用戶要上傳1個gig文件,那麼如果它被託管在單個dyno上,會導致應用程序的其餘部分掛起?Heroku和Rails文件上傳

回答

2

默認情況下,Rails不是線程安全的。這意味着每個運行的Rails實例一次只能處理一個請求。

在Heroku上,您可以在單個測功機上運行1個進程。這可能是薄,麒麟,一個工人的delayed_job等

由於Rails的不是默認線程安全的,薄只能同時處理1個請求(這意味着你的測功機只能同時處理1個請求)。在這種情況下,當用戶上傳1 GB文件時,Thin只能處理該請求=導致下一個請求掛起。爲了解決這個問題,你將不得不調整dynos的數量。例如運行4個dynos(運行Thin),並且您可以一次處理4個請求。

但是,如果您在Heroku測試版上使用Unicorn,並將Unicorn worker數量設置爲4,則Rails一次可處理4個請求。獨角獸很聰明。它在單個Heroku測功機內產生4個進程。這意味着當您上傳1 GB文件時,那麼Unicorn會繼續並處理3個請求。這一切都運行在一個單一的測功機上。

退房這篇文章在Heroku和獨角獸的詳細信息:http://michaelvanrooijen.com/articles/2011/06/01-more-concurrency-on-a-single-heroku-dyno-with-the-new-celadon-cedar-stack/

希望這有助於。

UPDATE

如果你把文件上傳到S3,你其實可以完全跳過你的DYNOS並直接上傳文件到S3。只是一個小費。 ;-)