【问题标题】:Downloading file with carrierwave from Rackspace cloudfiles not working从 Rackspace cloudfiles 下载带有carrierwave的文件不起作用
【发布时间】:2012-04-25 22:57:42
【问题描述】:

我正在使用 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.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 url。但不是,它返回的是 store_dir 路径。

编辑

我应该注意到 UploadedFile 模型的基础表有一个名为“file”的列,其中仅包含文件的基本名称,而不是 Rackspace 云文件的 url 或完整路径,这可能是问题的一部分...

【问题讨论】:

  • 该列只包含文件名。 URL 的其余部分由carrierwave 构建

标签: ruby-on-rails carrierwave fog


【解决方案1】:

确保您已配置您的 RackSpace 帐户以允许公开访问您的文件。在 Cloud / FilesContainers 下,编辑设置以启用 CDN。之后,公共链接将通过 CarrierWave::Uploader.url 提供

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多