2

皆さん: これを Stackoverflow に投稿する前にエラーを検索したので、これを指摘する必要はありません: groups.google.com/forum/?fromgroups=#!topic/carrierwave/ 同じ問題ではありません。

ユーザーが Rackspace コンテナにファイルをアップロードできるように、Carrierwave を使用しています。しかし、自分のサイト (ローカル マシン上、まだテスト モード) から送信すると、Fog::Storage::Rackspace::NotFound app/controllers/authors_controller.rb:8:in `update' エラーが発生します。私の 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

コントローラーの作者_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 では動作しませんか? そうでない場合...送信するための正しいコードはどこにありますか?

問題は何ですか?

4

4 に答える 4

2

同じ問題がありましたが、同じ名前ですべてのリージョンのコンテナを複数回作成する必要があることがわかりました。その後なぜうまくいったのか分かりませんが、それは試してみるべきことだと思いますか?

2012年11月7日更新

それで、Carrierwaveは私の答え以来いくつかの更新がありました。試行錯誤を重ねることで、より安定したアップロードが可能になりました。これが私がしたことです:

  1. 搬送波の宝石を0.7.0に更新しました
  2. Rackspaceにログインし、すべてのリージョンのコンテナを削除しました。
  3. 1つのコンテナを追加しました。どちらの地域があなたに適しているかは関係ありません。
  4. コンテナを公開しました(CDNを有効にする)
  5. コンテナのパブリックHTTPCDNリンクをコピーしました
  6. /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'に変更したことです。

于 2012-10-25T20:47:22.627 に答える
1

価値があるのは、AWSからRackspaceに移行した後、同じ問題を抱えていたことです。ファイルの更新の一部が古いファイルを削除しているため、エラーがスローされていました。私の場合、古いファイルは Rackspace ではなく S3 にあったため、carrierwave が動揺しました。

于 2012-11-13T22:35:45.117 に答える