2014-08-30 42 views
0

我有一個香草Carrierwave,霧,S3設置。上傳到S3是很好的,但是當我在本地的軌道控制檯中銷燬記錄時,或者我通過Delete鏈接從我的網絡應用程序中刪除時,它不會刪除S3上的文件。如何讓Carrierwave從S3中刪除文件?

其實,這是我的日誌是什麼樣子:

Started DELETE "/posts/13" for 127.0.0.1 at 2014-08-30 04:19:39 -0500 
Processing by PostsController#destroy as HTML 
    Parameters: {"authenticity_token"=>"jcyevWU9M=", "id"=>"13"} 
    Post Load (0.3ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = $1 LIMIT 1 [["id", 13]] 
    User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1 
    (0.3ms) SELECT COUNT(*) FROM "roles" INNER JOIN "users_roles" ON "roles"."id" = "users_roles"."role_id" WHERE "users_roles"."user_id" = $1 AND (((roles.name = 'admin') AND (roles.resource_type IS NULL) AND (roles.resource_id IS NULL))) [["user_id", 1]] 
    (0.2ms) BEGIN 
    Post Load (0.3ms) SELECT "posts".* FROM "posts" WHERE (("posts"."ancestry" ILIKE '13/%' OR "posts"."ancestry" = '13')) 
    Role Load (0.2ms) SELECT "roles".* FROM "roles" WHERE "roles"."resource_id" = $1 AND "roles"."resource_type" = $2 [["resource_id", 13], ["resource_type", "Post"]] 
    SQL (0.3ms) DELETE FROM "posts" WHERE "posts"."id" = $1 [["id", 13]] 
    (0.4ms) COMMIT 
Redirected to http://localhost:3000/posts 
Completed 302 Found in 401ms (ActiveRecord: 2.2ms) 

這是我file_uploader.rb文件:

# encoding: utf-8 

class FileUploader < CarrierWave::Uploader::Base 
    storage :fog 

    # Override the directory where uploaded files will be stored. 
    # This is a sensible default for uploaders that are meant to be mounted: 
    def store_dir 
    "files/#{SecureRandom.uuid()}" 
    end 

    def extension_white_list 
    %w(pdf) 
    end 
end 

這是我Post.rb模型文件:

# == Schema Information 
# 
# Table name: posts 
# 
# id   :integer   not null, primary key 
# status  :string(255) 
# title  :string(255) 
# photo  :string(255) 
# body  :text 
# created_at :datetime 
# updated_at :datetime 
# user_id :integer 
# ancestry :string(255) 
# file  :string(255) 
# 

class Post < ActiveRecord::Base 
    has_ancestry 
    belongs_to :user 
    resourcify 

    mount_uploader :photo, PhotoUploader 
    mount_uploader :file, FileUploader 
end 

這是我對我的刪除操作PostsController.rb

# DELETE /posts/1 
    # DELETE /posts/1.json 
    def destroy 
    @post.destroy 
    respond_to do |format| 
     format.html { redirect_to posts_url, notice: 'Post was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

我從來沒有能夠使用爲此應用創建的AWS IAM用戶從此S3存儲桶中刪除文件。

這可能是什麼原因造成的?

回答

4

問題在於你的上傳者。您正在使用安全隨機存儲目錄。

def store_dir 
    "files/#{SecureRandom.uuid()}" 
end 

當carrierwave嘗試刪除文件時,那麼由於隨機值store_dir指向其他某個地方。我相信你也無法在任何地方顯示這個文件。

因此,嘗試這樣的東西或不是隨機改變的東西。

def store_dir 
    "files/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
end 
+0

你是100%的錢無法在任何地方顯示此文件。有趣!那麼我有沒有辦法獲得隨機文件夾名稱? – marcamillion 2014-08-30 10:44:37

+0

不,這是不可能的。您始終有一些可以通過id或名稱或任何其他模型的屬性進行跟蹤的路徑。 – 2014-08-30 11:06:31

+0

那麼它只是可以隨機的文件名? - https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-Create-random-and-unique-filenames-for-all-versioned-files – marcamillion 2014-08-30 11:10:50