【问题标题】:Uploading to Rackspace Cloud Files with paperclip and fog使用回形针和雾上传到 Rackspace 云文件
【发布时间】:2013-01-04 13:38:17
【问题描述】:

不知道怎么做?并且无法从其他任何地方找到太多帮助!

我已经这样设置回形针和雾了;

config/initializers/fog.rb

     connection = Fog::Storage.new({
       :provider           => 'Rackspace',
       :rackspace_username => '',
       :rackspace_api_key  => ''
     })

环境.rb;

    Paperclip::Attachment.default_options.update({
    :path             => ":attachment/:id/:timestamp_:style.:extension",
    :storage          => :fog,
    :fog_credentials  => {
      :provider           => 'Rackspace',
      :rackspace_username => '',
      :rackspace_api_key  => '',
      :persistent         => false
    },
    :fog_directory    => '',
    :fog_public       => true

})

我正在使用file_field 获取图像,然后将其发布到我的控制器。这让我得到了这样的东西;

"pic"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007f90ac06a6c8 @original_filename="3245-1920x1200.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"cloth[pic][image]\"; filename=\"3245-1920x1200.jpg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<File:/tmp/RackMultipart20130104-5386-103laem>>}

我无法理解的是,我该如何使用类似的方式将此文件实际保存到云文件中;

file = directory.files.create(
  :key    => 'resume.html',
  :body   => File.open("/path/to/my/resume.html"),
  :public => true
)

编辑

相关模型;

class Cloth
  include Mongoid::Document
  has_many :pics

class Pic
  include Mongoid::Document
  include Mongoid::Paperclip
    belongs_to :cloth

    has_mongoid_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" }

在控制器中,这就是我当前基于上述参数创建图片的方式;

@cloth = Cloth.new
@cloth.pics.create!(params[:cloth][:pic])

【问题讨论】:

    标签: ruby-on-rails-3 paperclip rackspace-cloud fog cloudfiles


    【解决方案1】:

    让我们退后一步,从不同的角度来看问题。您能否查看以下脚本是否会将图像上传到您的容器:

    require 'fog'
    service = Fog::Storage.new({
      :provider                 => 'Rackspace',
      :rackspace_username        => YOUR_USERNAME,
      :rackspace_api_key    => YOUR_API_KEY
      })
    
    container = service.directories.new(:key => YOUR_CONTAINER_NAME)
    container.files.create :key => 'my-pix.jpg', :body => File.open PATH_TO_FILE
    

    用适当的变量更新大写参数,让我知道会发生什么。希望这将有助于缩小问题范围。

    【讨论】:

    • 明白了!我的容器所在区域是“芝加哥”,将其删除,在“达拉斯”创建了一个新容器,一切正常。显然:github.com/fog/fog/issues/1135 还没有人解决这个问题。呸,这个差点把我逼疯了。谢谢大佬!
    • 很高兴听到这个消息!提示一下,如果您将云服务器与云文件一起使用,您应该使用相同的数据中心来降低成本。
    • 接受这个作为答案,因为它让我想到了地区,因为它找不到目录!
    • Fog 最新版本支持指定存储服务的区域。更多信息请参考github.com/fog/fog/blob/master/lib/fog/rackspace/docs/…
    • service.directories.get 它非常慢,因为它返回冗余详细信息:字节、计数。如何加快速度?
    【解决方案2】:

    Paperclip 和 ActiveRecord 应该会自动为您处理文件上传。这是一个很好的快速入门解释该过程:

    https://github.com/thoughtbot/paperclip#quick-start

    如果仍有问题,能否提供相关控制器和型号代码?

    【讨论】:

    • 更新了上面的代码 - 没有活动记录,我正在使用'mongoid-paperclip' gem
    • 您在执行控制器代码时是否遇到任何异常?是否在 Mongo 中存储任何内容?
    • 不,例外。它将其存储在 mongo 中:[#&lt;Pic _id: 50e6deb5e2280d530b00006e, _type: nil, created_at: 2013-01-04 13:52:53 UTC, updated_at: 2013-01-04 13:52:53 UTC, cloth_id: "50e6deb4e2280d530b00006d", image_file_name: "3245-1920x1200.jpg", image_content_type: "image/jpeg", image_file_size: 133675, image_updated_at: 2013-01-04 13:52:52 UTC&gt;] 但不上传到云文件!
    • 好的!现在它正在抛出这个异常Fog::Storage::Rackspace::NotFound in ClothController#create 并将图像保存到公共/系统但不上传它们
    • 啊!看起来你正在取得一些进展。看起来fog_directory 设置应该对应于应该存储文件的容器。您是否将此值设置为您正在使用的容器的名称?
    猜你喜欢
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    相关资源
    最近更新 更多