gpt4 book ai didi

Ruby:回形针、S3 和深度克隆

转载 作者:数据小太阳 更新时间:2023-10-29 07:38:40 27 4
gpt4 key购买 nike

我有一个主题模型,其中包含许多 Assets 。 Assets 使用 Paperclip 并将其文件内容存储在我的 Amazon AWS-S3 系统中。我也在使用 deep_clone,因为我的客户能够复制内置主题,然后根据自己的喜好进行修改。所有 deep_clone 的东西都运行良好,但是当我 deep_clone Assets 时,旧文件内容不会添加到我的 S3 存储桶中。记录已保存到数据库中,但由于文件内容未使用新 ID 保存,因此 file.url 属性指向无效文件。

我试过手动调用回形针的保存和创建方法,但我无法弄清楚如何让回形针将文件“推”回存储桶,因为它现在有了新的 ID 等....

require 'open-uri'

class Asset < ActiveRecord::Base
belongs_to :theme
attr_accessor :old_id
has_attached_file :file,
:storage => "s3",
:s3_credentials => YAML.load_file("#{RAILS_ROOT}/config/aws.yml")[RAILS_ENV],
:bucket => "flavorpulse-" + RAILS_ENV,
:path => ":class/:id/:style.:extension"
validates_attachment_presence :file
validates_attachment_size :file, :less_than => 5.megabytes

before_save :delete_assets_in_same_theme_with_same_name
after_create :copy_from_cloned_asset

private
def delete_assets_in_same_theme_with_same_name
Asset.destroy_all({:theme_id => self.theme_id, :file_file_name => self.file_file_name})
end

def copy_from_cloned_asset
if (!old_id.blank?)
if (old_id > 0)
old_asset = Asset.find(old_id)
if (!old_asset.blank?)
self.file = do_download_remote_image(old_asset.file.url)
self.file.save
end
end
end
end

def do_download_remote_image (image_url)
io = open(URI.parse(image_url))
def io.original_filename; base_uri.path.split('/').last; end
io.original_filename.blank? ? nil : io
rescue # catch url errors with validations instead of exceptions (Errno::ENOENT, OpenURI::HTTPError, etc...)
end
end

关于如何让回形针推送文件的任何想法?我也不反对使用亚马逊的 aws-s3 gem 来做这件事,但我似乎也无法让它发挥作用。

最佳答案

根据 this former question/answer , 应该可以用这行简单的代码:

self.file = old_asset.file

关于Ruby:回形针、S3 和深度克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3327669/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com