2012-02-20 9 views
5

私は生産と開発のためのS3バケットを持っています。私は私の研究とcame across this postを行っていますが、私の現在の設定は期待どおりに動作しません。私はローカルに(下)次の例外を取得し、私は私のHerokuのアプリから私のS3バケットに何のファイルのアップロードを取得していない:howto:キャリアウェーブの基本設定[HerokuとS3]

is not a recognized storage provider 
Extracted source (around line #3): 

1: 
2: <p><%= user.name %></p> 
3: <%= image_tag user.avatar.url %> 
4: <%= link_to 'Show', user %> 
5: <%= link_to 'Edit', edit_user_path(user) %> 
6: <%= link_to 'Destroy', user, confirm: 'Are you sure?', method: :delete %> 

しかし私はローカルですべてが期待どおりに動作します*_uploader.rbファイルの内部でstorage :fileを設定します。しかし、それでも私のS3のバケツに送られることに注意してください。ここで

は私のセットアップです:

user.rb

class User < ActiveRecord::Base 
attr_accessible :name, :avatar, :avatar_cache, :remote_avatar_url, :remove_avatar 
mount_uploader :avatar, AvatarUploader 
end 

fog.rb

CarrierWave.configure do |config| 
    if Rails.env.production? 
    config.storage = :fog 
    config.fog_credentials = { 
    :provider    => 'AWS', 
    :aws_access_key_id  => ENV['S3_K'], 
    :aws_secret_access_key => ENV['S3_SCRT'], 
    :region    => ENV['S3_RG'] 
    } 
    config.fog_directory = ENV['S3_BUCKET'] 
    config.fog_host  = 'http://www.example.com' 
    config.fog_public  = true         # optional, defaults to true 
    config.fog_attributes = {'Cache-Control' => 'max-age=315576000'} # optional, defaults to {} 

else 
#for development and testing locally 
    config.storage = :file 
    config.enable_processing = false 
end 
end 

* _uploader.rb

01私は、レコードではなく、画像ファイルを保存することができていたことを確認することができ、@のCanBerkGüderへ

users_controller.rb

def new 
@user = User.new 
@user.avatar = params[:file] 
    respond_to do |format| 
    format.html # new.html.erb 
    format.json { render json: @user } 
    end 
end 

def create 
@user = User.new(params[:user]) 
@user.avatar = params[:file] 
    respond_to do |format| 
    if @user.save 
    format.html { redirect_to @user, notice: 'User was successfully created.' } 
    format.json { render json: @user, status: :created, location: @user } 
    else 
    format.html { render action: "new" } 
    format.json { render json: @user.errors, status: :unprocessable_entity } 
    end 
end 

エンド

UPDATE 感謝。いつも私がユーザオブジェクトを作成しようとすると、私の英雄ログが吐き出されます:

2012-02-20T23:19:45+00:00 app[web.1]: app/controllers/users_controller.rb:46:in `block in create' 
2012-02-20T23:19:45+00:00 app[web.1]: app/controllers/users_controller.rb:45:in `create' 
2012-02-20T23:19:45+00:00 app[web.1]: 
2012-02-20T23:19:45+00:00 app[web.1]: cache: [POST /users] invalidate, pass 
+1

2つのことを確認するには:1.あなたのGemfileにリストされている「霧」逸品ですか?もしそうなら、イニシャライザでconfig.storage =:fogを指定してみてください。 –

+0

@CanBerkGüder私は自分のイニシャライザを更新しましたが、運がまだありません。アップデート後に何が起こったのかUPDATEセクションをご覧ください。 – rhodee

+0

S3にはディレクトリがないため(単にuploads/user/avatar/1/2_48x48.pngという名前のファイル)、ディレクトリ構造は重要ではありません。残念ながら、私はあなたが見ているエラーを引き起こすかもしれない第三の理由を考えることができません。 –

答えて

1

OKです。 CarrierWaveには、下にあるフォグを使用する下位互換性のためのS3アダプタが含まれています。私は個人的に:fogの代わりに使用します。理論的には、両者の間に違いはないはずですが、私はそれが一撃の価値があると思います。ここではHerokuの上で実行されているライブのアプリケーションからの私CarrierWave初期化子です:

CarrierWave.configure do |config| 
    if Rails.env.production? 
    config.root = Rails.root.join('tmp') 
    config.cache_dir = 'carrierwave' 

    config.storage = :s3 
    config.s3_access_key_id = ENV['S3_KEY'] 
    config.s3_secret_access_key = ENV['S3_SECRET'] 
    config.s3_bucket = ENV['S3_BUCKET'] 
    else 
    config.storage = :file 
    end 
end 

最初の2行(config.rootとconfig.cache_dirが)のことは何もないはずですHerokuのの読み取り専用ファイルシステム、回避することがありますあなたの問題を解決してください。

+0

私は、ドキュメントの2つの行のアップデートに出会った、私に思い出させるために感謝します。私のコントローラーはどのように見えますか? 'new'と' create'アクションに '@user.avatar = params [:file]'のような行を追加する必要がありますか? – rhodee

+0

私の設定ではあなたの答えはうまくいかなかったが、私の一部の研究では間違いなくインスピレーションを受けた!ありがとうございました。 – rhodee

+0

@rhodeeそれはうまくいかなかったと聞いて申し訳ありません。どういたしまして。 –

0

1つの問題は、この設定を使用する場合、あなたはおそらくそこに本当のホストを必要とする

config.fog_host  = 'http://www.example.com' 

かもしれません。私はそれが強く推奨されているが、おそらくあなたはその行をコメントすることができます。

そして、あなたはHerokuでENV変数を設定するとしますか?

heroku config:add S3_K=[my_s3_key] S3_SCRT=[my_s3_secret] S3_RG=[us-east-1]S3_BUCKET=[my_bucket_name] 

私はかなり同じ設定を使用しました。鉱山では動作しませんでしたが、私はさらなるステップまたは2を得たと思う:

Missing required arguments: aws_access_key_id, aws_secret_access_key