【问题标题】:Fog::Storage::Rackspace::NotFound error when using Carrierwave to upload to Rackspace使用 Carrierwave 上传到 Rackspace 时出现 Fog::Storage::Rackspace::NotFound 错误
【发布时间】:2012-10-16 20:35:34
【问题描述】:

大家:我在将它发布到 Stackoverflow 之前已经搜索过错误,所以无需指出这个:groups.google.com/forum/?fromgroups=#!topic/carrierwave/ 这不是同一个问题。

我正在使用 Carrierwave,因此用户可以将文件上传到我的 Rackspace 容器。但是当我从我的站点提交时(在我的本地机器上,仍处于测试模式),我得到一个 Fog::Storage::Rackspace::NotFound app/controllers/authors_controller.rb:8:in “更新”错误。我的 Rackspace 容器称为 kontainer.ofstuff。这是我的代码:

pic_uploader.rb:

class PicUploader < CarrierWave::Uploader::Base

  include Rails.application.routes.url_helpers
  storage :fog

  def store_dir
    "#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
end

模型作者.rb

class Author < ActiveRecord::Base
  attr_accessible :stuff, :profilepic

  mount_uploader :pic, PicUploader

  def dostuff
  end
end

carrierwave.rb 位于 config/initializers 目录中

CarrierWave.configure do |config|

  config.storage = :fog
  config.fog_credentials = {
    :provider           => 'Rackspace',
    :rackspace_username => 'myusername',
    :rackspace_api_key  => '98765asecretnumber3'
  })
  config.fog_directory = 'kontainer.ofstuff'
  config.fog_host = 'https://34567secretnumberiiiii.ssl.cf2.rackcdn.com'
end

控制器 authors_controller.rb

class AuthorsController < ApplicationController

  def update
    @author = Author.find(params[:id])
    @booklist = Book.where(:author_id => @author.id)
#line 7
    if @author.update_attributes(params[:author])
      sign_in @author
      redirect_to @author
    else
      render 'profileinfo'
    end
  end
end

edit.html.erb:

<%= f.file_field :pic %>
<%= f.submit "Save Author Info" %> 

当我将此代码“上传”/存储到文件时,它运行良好。也许 f.submit 不适用于 Carrierwave?如果没有...我在哪里可以找到正确的提交代码?

有什么想法吗?

【问题讨论】:

  • 我从未使用过 Rackspace,但您提供的容器名称是否正确?您可能遇到与groups.google.com/forum/?fromgroups=#!topic/carrierwave/… 相同的错误
  • 已经看到那个话题,我在上面提到了我的容器名称。所以,不,这不是我遇到的问题。我什至尝试制作一个新容器,使用新 URL 等,但仍然是同样的问题。而且由于容器不识别目录(仅对象),我尝试将目录名称从 def store_dir "#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 结尾弄乱没有运气。

标签: ruby-on-rails-3 file-upload carrierwave rackspace fog


【解决方案1】:

我也遇到了这个错误。 通过将此添加到上传的代码来解决:

class MyUploader < CarrierWave::Uploader::Base

  ....

  def remove!
    begin
      super
    rescue Fog::Storage::Rackspace::NotFound
    end
  end

end

【讨论】:

  • 虽然这解决了问题,但它并没有解决症状。现在已经足够好了,但不知道 WTF 是否真的在进行。
  • 我有一个非常相似的问题,这确实有效。就我而言,似乎在记录更新之前旧文件已被删除,这会导致carrierwave出错。仍然不能 100% 确定原因,但这确实解决了问题。
【解决方案2】:

我也遇到过同样的问题,但对我来说,我需要多次使用相同的名称创建容器,但要针对所有区域。我不知道为什么它在那之后会起作用,但我想这是可以尝试的?

2012 年 11 月 7 日更新

所以自从我回答之后,Carrierwave 有了一些更新。通过一些试验和错误,我能够获得更稳定的上传。这是我所做的:

  1. 将载波 gem 更新到 0.7.0
  2. 登录 Rackspace 并删除所有区域的容器。
  3. 添加了一个容器。无论哪个地区更适合您。
  4. 公开容器(启用 CDN)
  5. 复制了容器的公共 HTTP CDN 链接
  6. 更新了我的 /config/initializers/carrierwave.rb 文件:

    CarrierWave.configure do |config|
      config.fog_credentials = {
        :provider           => 'Rackspace',
        :rackspace_username => '[Your Rackspace Username]',
        :rackspace_api_key  => '[Your Rackspace API key]'
      }
      config.fog_directory = '[The name of the container you created]'
    
      if Rails.env.production? || Rails.env.staging?
        config.asset_host = '[The Public HTTP CDN url for the container]'
      end
    end
    

请注意:我将上传器配置为在生产或暂存环境时使用 storage:fog。否则我使用默认的本地文件系统。

主要需要注意的是,carrierwave 将配置“fog_host”更改为“asset_host”。

【讨论】:

  • Jay,那是用 Rackspace 还是 AWS?我尝试上传到 AWS(有一组完全不同的上传错误),并且可以指定区域。
  • Rackspace,但自从我的回答我更新了carrierwave。从那时起,他们有了更新。现在的设置不一样了。我也能够让它更稳定。我会用我的新设置和我所做的更新我的答案。
  • 谢谢杰。我继续使用 AWS,但您更新 Carrierwave gem 的建议解决了这个问题!
  • 没有问题,布拉德。我实际上也搬到了 AWS。从那以后头痛少了很多。你能接受同样的答案吗?谢谢!
【解决方案3】:

对于它的价值:从 AWS 迁移到 Rackspace 后,我遇到了同样的问题。由于更新文件的一部分正在删除旧文件,因此引发了错误。在我的情况下,旧文件在 S3 上,而不是在 Rackspace 上,所以carrierwave 很不高兴。

【讨论】:

【解决方案4】:

这似乎是等待几个月并安装更新的 gem 的情况。问题几乎消失了。我也摆脱了 Rackspace 并转到了 Amazon S3,尽管我之前曾尝试过 S3,但也遇到了同样的问题。我将解决方案归功于更新后的 Carrierwave gem。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 2011-01-13
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多