Ruby on rails 回形针:在运行时保存本地文件或S3文件之间进行选择
我用回形针来保存文件。我已经成功地配置了将文件直接保存到Amazon S3的回形针。但在某些情况下,我只需要在本地保存文件。我的问题是:我如何才能做到这一点 以下是我的回形针配置示例:Ruby on rails 回形针:在运行时保存本地文件或S3文件之间进行选择,ruby-on-rails,amazon-s3,paperclip,Ruby On Rails,Amazon S3,Paperclip,我用回形针来保存文件。我已经成功地配置了将文件直接保存到Amazon S3的回形针。但在某些情况下,我只需要在本地保存文件。我的问题是:我如何才能做到这一点 以下是我的回形针配置示例: Paperclip.interpolates(:upload_url) { |attachment, style| "#{ENV.fetch('UPLOAD_PROTOCOL', 'http')}://#{ENV.fetch('UPLOAD_DOMAIN', 'localhost:3000')}/uploads/
Paperclip.interpolates(:upload_url) { |attachment, style| "#{ENV.fetch('UPLOAD_PROTOCOL', 'http')}://#{ENV.fetch('UPLOAD_DOMAIN', 'localhost:3000')}/uploads/:class/:attachment/:id_:style.:extension" }
Paperclip::Attachment.default_options.merge!(
storage: :s3,
s3_region: ENV['CEPH_REGION'],
s3_protocol: 'http',
s3_host_name: ENV['CEPH_HOST_NAME'],
s3_credentials: {
access_key_id: ENV['CEPH_ACCESS_KEY_ID'],
secret_access_key: ENV['CEPH_SECRET_KEY'],
},
s3_options: {
endpoint: ENV['CEPH_END_POINT'],
force_path_style: true
},
s3_permissions: 'public-read',
bucket: ENV['CEPH_BUCKET'],
url: ':s3_path_url',
path: ':class/:id/:basename.:extension',
use_timestamp: false
)
module Paperclip
def self.string_to_io(options)
data = StringIO.new(options[:data])
data.class.class_eval{ attr_accessor :original_filename }
data.original_filename = options[:original_file_name]
data
end
end
你可以用兰姆达。如图所示 它看起来像这样
class YOURMODEL < ActiveRecord::Base
has_attached_file :FILE, storage: lambda { |attachment| (attachment.instance.use_s3? ? :s3 : :filesystem) }
end
classyourmodel
然后,您必须向模型中添加一个方法
use\u s3?
,以检查您是否希望将文件存储在本地或与s3一起。我在下面给出了一个答案,只是出于好奇,您为什么要尝试这样做?我遇到了一个例外:回形针::错误::StorageMethodNotFound
。你知道为什么吗?我也尝试了:storage=>:filesystem
,但它似乎不起作用。