我正在将我的ruby应用程序升级到3.2.2版本,从zeitwerk:check得到这个错误:
ArgumentError: unknown keyword: :service (ArgumentError)
/home/asd/app/config/initializers/active_storage.rb:5:in `has_one_attached'
字符串
active_storage.rb:
Rails.application.config.to_prepare do
# Provides the class-level DSL for declaring that an Active Record model has attached blobs.
ActiveStorage::Attached::Model.module_eval do
class_methods do
def has_one_attached(name, dependent: :purge_later, acl: :public)
generated_association_methods.class_eval <<-CODE, __FILE__, __LINE__ + 1
def #{name}
@active_storage_attached_#{name} ||= ActiveStorage::Attached::One.new("#{name}", self, acl: "#{acl}")
end
def #{name}=(attachable)
attachment_changes["#{name}"] =
if attachable.nil?
ActiveStorage::Attached::Changes::DeleteOne.new("#{name}", self)
else
ActiveStorage::Attached::Changes::CreateOne.new("#{name}", self, attachable, acl: "#{acl}")
end
end
CODE
has_one :"#{name}_attachment", -> { where(name: name) }, class_name: "ActiveStorage::Attachment", as: :record, inverse_of: :record, dependent: :destroy
has_one :"#{name}_blob", through: :"#{name}_attachment", class_name: "ActiveStorage::Blob", source: :blob
scope :"with_attached_#{name}", -> { includes("#{name}_attachment": :blob) }
after_save { attachment_changes[name.to_s]&.save }
after_commit(on: %i[ create update ]) { attachment_changes.delete(name.to_s).try(:upload) }
ActiveRecord::Reflection.add_attachment_reflection(
self,
name,
ActiveRecord::Reflection.create(:has_one_attached, name, nil, { dependent: dependent }, self)
)
end
def has_many_attached(name, dependent: :purge_later, acl: :public)
...
end
end
end
ActiveStorage::Blob.class_eval do
def service_url(expires_in: ActiveStorage.service_urls_expire_in, disposition: :inline, filename: nil, **options)
filename = ActiveStorage::Filename.wrap(filename || self.filename)
expires_in = false if metadata[:acl] == 'public'
service.url key, expires_in: expires_in, filename: filename, content_type: content_type_for_service_url,
disposition: forced_disposition_for_service_url || disposition, **options
end
def upload_without_unfurling(io)
service.upload key, io, checksum: checksum, **service_metadata.merge(acl: metadata[:acl])
end
end
...
型
该服务在development.rb中设置为:config.active_storage.service = :local
,并在storage.yml中定义
local:
service: Disk
root: <%= Rails.root.join("storage") %>
型
我不知道缺少了什么,也找不到类似的问题。Ruby:3.2.2 Rails:7.1.2
1条答案
按热度按时间agyaoht71#
我添加了服务的方法如下,错误消失了:
字符串