我正在使用Carrierwave将文本文件上传到Rackspace,并使其正常工作。我的设置非常标准:
者:
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帐户中看到我的文件。 我还看到我的模型已保存,并且我在upload_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模型的基础表有一个名为“file”的列,它只包含文件的基本名称,而不是Rackspace云文件的url或完整路径,这可能是问题的一部分...
答案 0 :(得分:0)
确保您配置了RackSpace帐户以启用对文件的公共访问。在 Cloud / FilesContainers 下,编辑设置以启用CDN。之后,公共链接将通过CarrierWave :: Uploader.url
提供