2

私は 2 つの Carrierwave アップローダを持っています -ItemUploaderと とImageUploaderフォグを使用しています。

ファイルを S3 に問題なくアップロードできますが、破棄しても S3 から削除されません。

これは私のdestroy行動です:

  def destroy
    @item = Item.find(params[:id])
    @item.destroy

    respond_to do |format|
      format.html { redirect_to items_url }
      format.json { head :no_content }
    end
  end

するとitem.destroy、データベースからレコードが削除されますが、S3 からファイルは削除されず、フォルダーも削除されません。

これは、バニラ設定の真新しい S3 バケットです。また、まったく新しいCarrierwaveのインストール。

参考までに:コントローラーの destroy アクションに@item.remove_item!andを追加しようとしましたが、それでもうまくいきませんでした。@item.remove_image!

編集 1

そのため、添付ファイルの1つが削除されるようです。

モデルには次のものがあります。

class Item < ActiveRecord::Base
#  image       :string(255)
#  link        :string(255)
  mount_uploader :link, ItemUploader
  mount_uploader :image, ImageUploader
end

そのため、コンソールでオブジェクトを削除すると、関連付けられたオブジェクトが削除され、ItemUploaderを介して関連付けられた画像は削除されませんImageUploader

なぜ1を削除し、もう1を削除しないのですか?

4

3 に答える 3

1

コンソールに何か問題があるようです。Web UI を介してオブジェクトを削除すると、S3 のすべての関連オブジェクトが削除されるためです。

しかし、コンソールから実行すると機能しません。

その特定の問題について別のSO質問を開きます。

于 2013-05-05T21:33:42.173 に答える
-1

AWS SDK を使用 - https://github.com/amazonwebservices/aws-sdk-for-ruby

3 でオブジェクトを管理するためのファサードを構築できます。次に例を示します。

require 'aws-sdk'

class Facades::AmazonFacade
  attr_reader :s3

  #
  # Connection to Amazon S3
  #

  def initialize
     @s3 = AWS::S3.new(
       :access_key_id => config['access_key_id'],
       :secret_access_key => config['secret_access_key']
     )
     @bucket = @s3.buckets[self.config['bucket']]
  end

  def config
    @@config ||= YAML::load(File.open("#{Rails.root}/config/amazon_s3.yml" ))[Rails.env]
  end

  ####

  def policy(bucket, options = {})
   # Base 64 policy
  end

  def signature(bucket, options = {})
   # Base64 signature
  end



  #
  # Find object and get public urls
  #


  def url_link(obj, expires)
    @bucket.objects[obj].url_for(:read, :secure => true, :expires => 10*60).to_s
  end

  def object_exists_on_amazon?(obj)
    @bucket.objects[obj].exists?
  end

  def object_size(obj)
    unless Rails.env.test?
      @bucket.objects[obj].content_length
    end
  end

  def object_upload_date(obj)
    @bucket.objects[obj].last_modified
  end



  #
  # create, delete objects
  #


  def store_object_on_amazon(obj, file, access)
    @bucket.objects[obj].write(file, :acl => access)
  end

  def delete_object_on_amazon(obj)
    @bucket.objects[obj].delete(:force => true)
  end

end
于 2013-05-05T15:33:48.357 に答える