2011-04-12 55 views
0

我的網絡主機是Heroku,它不允許文件保存到本地文件系統。因此,我正在使用Carrierwave將我的文件存儲到Amazon S3上。我應該緩存載波網址嗎?

在控制檯中,我注意到當我這樣做:

Photo.last.attachment.url 

它返回:

=> "https://foobar.s3.amazonaws.com/uploads/users/1/photos/7/foo.jpg" 

正如預期的那樣。但是,控制檯中的這個過程(返回值)需要2-3秒。我的猜測是它試圖訪問S3。甚至最糟糕的是,當我加載包含多張照片的網頁時,加載需要很長時間。

有人提到,因爲我通過S3遠程存儲我的文件,我應該緩存「Photo.last.attachment.url」的結果。

這意味着,在我的數據庫,我需要有兩列:

:附件和:attachment_url

:附件將在Carrierwave上傳對象和:attachment_url將鏈接到S3直接文件。

這是我應該做的嗎?有更好的選擇嗎?

回答

2

這已在最新版本的Carrierwave中修復。最好不要緩存,URL創建便宜。在創建URL時檢查文件是Fog的行爲。現在的行爲是簡單地給出鏈接。你可以看到這個討論: https://github.com/jnicklas/carrierwave/issues/289https://github.com/jnicklas/carrierwave/issues/261

+0

感謝指出這個錯誤,並高興寶石的開發者設法解決這個問題。非常感激! – 2011-04-26 12:31:48

+0

儘管在這種情況下最好不要緩存,但說URL創建便宜是錯誤的。在複雜的URL場景(顯示數據層次結構)中,URL生成可能很昂貴,因此建議進行緩存。 – 2011-06-01 10:14:18

+0

+1爲線索。發生這種事時我錯過了。我可能會堅持使用緩存,但很高興知道你不再需要(或者面對頁面上的每個url查詢s3)。 – numbers1311407 2011-08-22 20:30:11

0

我會做緩存。我們用Paperclip做了類似的方法。

或者,您可以緩存正在使用URLS的視圖(部分)。

相關問題