我如何验证ActiveStorage Blob实际上存在?

问题描述 投票:0回答:1

我有一个已经在生产中运行了几个月的应用程序,其中包含成千上万个附件。今天早上,我尝试对其中一个附件进行操作,并收到以下错误:

Azure::Core::Http::HTTPError: BlobNotFound (404): The specified blob does not exist.

我可以轻松地重新创建此Blob,但是这种情况使我想编写一个脚本来检查附件all的完整性,并确认没有其他丢失。 (我希望这是一个暂时性的网络错误,希望发现的很少,但是我需要放心。)

[我可以看到有一个调用方法似乎完全符合我的需要:exist?(key),在此处记录:

https://github.com/rails/rails/blob/master/activestorage/lib/active_storage/service/disk_service.rb

但是,我不知道该如何称呼它。根据this,它被实现为实例方法。那么,如何使用我的Rails应用程序的活动ActiveStorage instance(取决于环境)来使用此方法?

ruby-on-rails rails-activestorage
1个回答
0
投票

我想知道是否有可能回溯以获取ActiveStorage :: Service :: AzureStorageService的实例(在生产中,并在找到类的每个实例时发现this answer

[从那里,我发现我可以:

asass = ObjectSpace.each_object(ActiveStorage::Service::AzureStorageService).first

然后让我来:

2.5.5 :015 > asass.exist?(c.json.blob.key)
  AzureStorage Storage (313.3ms) Checked if file exists at key: ....PTLWNbEFLgeB8Y5x.... (yes)
 => true

[深入研究Rails的GitHub问题,使我发现可以通过存储对象的实例来访问ActiveStorage服务实例,而我总是可以使用send()方法来调用方法之一:

2.5.5 :045 > c.json.blob.service.send(:exist?, c.json.blob.key)
  AzureStorage Storage (372.4ms) Checked if file exists at key: ....PTLWNbEFLgeB8Y5x.... (yes)
    => true

我确定这两种方法都可以照亮相同的代码路径,但是目前尚不确定我更喜欢哪种方法。我仍然认为必须存在某种通过app.Rails.application.遍历Rails实例以到达ActiveStorage实例的方法,但是我无法对此进行说明。

© www.soinside.com 2019 - 2024. All rights reserved.