大家:在将其发布到Stackoverflow之前,我已经搜索了错误,因此无需指向我:groups.google.com/forum/?fromgroups=#!topic/carrierwave/这不是一个相同的问题。

我正在使用Carrierwave,以便用户可以将文件上传到我的Rackspace容器中。但是,当我从站点提交(在本地计算机上,仍处于测试模式)时,我收到 Fog::Storage::Rackspace::NotFound 应用程序/ Controller /authors_controller.rb:8:出现“更新”错误。我的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

模型author.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

Controller 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不兼容?如果没有,我在哪里可以找到正确的提交代码?

任何想法是什么麻烦?

最佳答案

我遇到了同样的问题,但是对我来说,我需要多次对所有区域使用相同的名称制作容器。我不知道为什么之后会起作用,但是我想可以尝试一下吗?

更新11-7-2012

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

  • 已将carrierwave gem更新为0.7.0
  • 登录到Rackspace并删除所有区域的容器。
  • 添加了一个容器。哪个地区都无所谓,哪个更适合您。
  • 公开容器(启用CDN)
  • 为容器
  • 复制了公共(public)HTTP CDN链接
  • 更新了我的/config/initalizers/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”。

    关于ruby-on-rails-3 - 使用Carrierwave上传到Rackspace时出现Fog::Storage::Rackspace::NotFound错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12922980/

    10-17 01:01