2012-04-25 57 views
1

我正在使用Carrierwave將文本文件上傳到Rackspace,並使其工作。我的設置是真正的標準:從Rackspace雲文件下載carrierwave文件不起作用

者:

class FileUploader < CarrierWave::Uploader::Base 
    include CarrierWave::MimeTypes 

    storage :fog 

    def store_dir 
    "/my/local/path" 
    end 
end 

型號:

class UploadedFile < ActiveRecord::Base 
    attr_accessible :file 

    mount_uploader :file, FileUploader 
end 

Carrierwave init文件:

CarrierWave.configure do |config| 
    config.fog_credentials = { 
    :provider   => "Rackspace", 
    :rackspace_username => "xxxxx", 
    :rackspace_api_key => "yyyyy" 
    } 
    config.fog_directory = "my_container" 
    config.fog_host = "http://c000000.cdn.rackspacecloud.com" 
    config.fog_public = false 
end 

我不是從形式上傳文件,而是我使用延遲作業在後臺進程中生成文件,然後將其上傳到Rackspace:

file = File.new("/my/local/path/some_text_file.txt", "r") 
uploaded_file = UploadedFile.new 
uploaded_file.file = file 
uploaded_file.save 

到目前爲止,一切都很好。我可以在我的Rackspace帳戶中看到我的文件。 我也看到我的模型保存了,並且在我的uploaded_files表中有記錄。

我的問題是檢索文件。我試過以下內容:

downloader = FileUploader.new 
downloader.retrieve_from_store!("some_text_file.txt") 

我意識到retrieve_from_store!實際上並沒有下載該文件。但是,接下來應該是:

downloader.cache_stored_file! 

但是由於之前的調用沒有檢索到任何內容,因此斷行。

我覺得我做的事情對我的下載根本錯誤,如下產生奇數輸出:

f = UploadedFile.first 
f.file.url 

"/my/local/path/some_text_file.txt" 

基於所有我見過的例子,我希望f.file.url返回一個Rackspace CDN網址。但不是,它會返回store_dir路徑。

編輯

我應該注意,UploadedFile的模型基礎表中有一個名爲「文件」欄,僅包含文件的基本名稱,而不是一個URL或完整路徑Rackspace的雲文件,這可能是問題的一部分...

+0

它的目的是該列僅包含文件名。網址的其餘部分由carrierwave構建 – RocketR 2014-11-20 18:46:41

回答

0

確保您配置了RackSpace帳戶以啓用公共訪問您的文件。在Cloud/FilesContainers下,編輯設置以啓用CDN。之後,公共鏈接將通過CarrierWave :: Uploader.url提供。