0

私は AWS で CarrierWave を問題なくずっと使用してきましたが、私の最新のプロジェクトではまったく機能しません。ファイルは問題なく AWS にアップロードされますが、ファイルの場所を DB テーブルに保存する代わりに、モデル全体のコピーを保存します。ページが読み込まれると、レールがテーブルに保存されているデータをどう処理するかを判断できないため、エラーが発生
します 以下を確認してください.. Railsコンソールから直接、profile_pictureCarrierWaveにマウントされたフィールドを使用しています.

生成された URL ではなく、オブジェクト全体が保存されているようです。誰もこれについて何か考えがありますか?

dog = Dog.first
=> #<Dog id: 2, user_id: nil, name: "Lentil", profile_picture: "971935_556519314400437_65392555_n.jpg", breed_id: 2, 
color: "fawn with black mask", age: 1, gender: "m", created_at: "2013-08-03 17:57:00", updated_at: "2013-08-03 18:12:33">

dog.profile_picture
=> #<ImageUploader:0x007f83388b70f0 @model=#<Dog id: 2, user_id: nil, name: "Lentil", profile_picture: "971935_556519314400437_65392555_n.jpg", breed_id: 2, color: "fawn with black mask", age: 1, gender: "m", created_at: "2013-08-03 17:57:00", updated_at: "2013-08-03 18:12:33">, @mounted_as=:profile_picture, @storage=#
<CarrierWave::Storage::Fog:0x007f83388b6b50 @uploader=#<ImageUploader:0x007f83388b70f0 ...>, @connection=#<Fog::Storage::AWS::Real:0x007f8336d5e3d0 @aws_access_key_id="xxx", @aws_secret_access_key="xxx", @hmac=#<Fog::HMAC:0x007f8336d5e100 @key="xxx", @digest=#<OpenSSL::Digest::Digest: xxx>, @signer=#<Proc:0x007f8336d5ddb8@/app/vendor/bundle/ruby/2.0.0/gems/fog-0.9.0/lib/fog/core/hmac.rb:22 
(lambda)>>, @endpoint=nil, @host="s3.amazonaws.com", @path="/", @port=443, @scheme="https", @connection=#<Fog::Connection:0x007f8336d5db10 @excon=#<Excon::Connection:0x007f8336d5d8b8 @connection={:headers=>{}, :host=>"s3.amazonaws.com", :mock=>nil, :path=>"/", :port=>"443", :query=>nil, :scheme=>"https"}, @socket_key="s3.amazonaws.com:443">, @persistent=true>>>, @file=#<CarrierWave::Storage::Fog::File:0x007f83388b6510 @uploader=#<ImageUploader:0x007f83388b70f0 
...>, @base=#<CarrierWave::Storage::Fog:0x007f83388b6b50 @uploader=#<ImageUploader:0x007f83388b70f0 ...>, @connection=#<Fog::Storage::AWS::Real:0x007f8336d5e3d0 @aws_access_key_id="xxx", @aws_secret_access_key="xxx", @hmac=#<Fog::HMAC:0x007f8336d5e100 @key="xxx", @digest=#<OpenSSL::Digest::Digest: xxx>, @signer=#<Proc:0x007f8336d5ddb8@/app/vendor/bundle/ruby/2.0.0/gems/fog-0.9.0/lib/fog/core/hmac.rb:22 
(lambda)>>, @endpoint=nil, @host="s3.amazonaws.com", @path="/", @port=443, @scheme="https", @connection=#<Fog::Connection:0x007f8336d5db10 @excon=#<Excon::Connection:0x007f8336d5d8b8 @connection={:headers=>{}, :host=>"s3.amazonaws.com", :mock=>nil, :path=>"/", :port=>"443", :query=>nil, :scheme=>"https"}, @socket_key="s3.amazonaws.com:443">, @persistent=true>>>, @path="uploads/dog/profile_picture/2/971935_556519314400437_65392555_n.jpg">, @versions={}>
4

2 に答える 2

1

gem に問題がありました。再インストール後、すべて正常に機能しました。

于 2013-09-01T05:30:53.587 に答える
0

Carrierwave はマウント時にゲッターをオーバーライドするため、 を呼び出すとprofile_picture、ファイル URL ではなくアップローダーのインスタンスが返されます。実際のデータベースには、ファイルの URL のみが格納されます。

アップローダで呼び出すことができるさまざまなメソッドがあります。最も一般的なのはurl. さらなる混乱を避けるために、gem を使用する前に、Github の Carrierwave のドキュメントを読む必要があります。

于 2013-08-03T19:11:46.137 に答える