在销毁或覆盖时,Rails、CarrierWave和Fog如何忽略丢失的文件?

2026-04-11 18:081阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计705个文字,预计阅读时间需要3分钟。

在销毁或覆盖时,Rails、CarrierWave和Fog如何忽略丢失的文件?

在Rails中,处理丢失的附件/图像时,正确的做法是使用Fog删除记录。如果你丢失了图像并想将其导入RackSpace后清理记录,以下是一些步骤和注意事项:

1. 确保你的图像文件已成功导入到RackSpace。

2.在数据库中找到对应图像的记录。

3.使用Fog删除RackSpace上的图像。

4.在数据库中删除对应的记录。

在销毁或覆盖时,Rails、CarrierWave和Fog如何忽略丢失的文件?

注意:在删除记录前,请确保已备份相关数据,以防止数据丢失。

以下是一个示例代码片段:

ruby

找到图像记录image_record=Image.find(image_id)

使用Fog删除RackSpace上的图像fog_storage.delete(image_record.file_path)

删除数据库中的记录image_record.destroy

在尝试删除记录时,你可能遇到错误。以下是一些常见错误和解决方案:

1. 错误:找不到图像文件:确保图像文件已成功导入到RackSpace,并且`file_path`字段包含正确的路径。

2.错误:无法连接到RackSpace:检查Fog配置是否正确,包括提供正确的API密钥和区域。

3.错误:记录未找到:确保图像记录的ID正确无误。

请根据实际情况调整代码和错误处理。

Rails中的正确方法是什么是CarrierWave在丢失附件/图像时使用Fog删除/销毁记录?

我想在丢失图像导入RackSpace后清理一些记录.有一些丢失的图像和拇指.当我尝试删除记录时,我收到错误

雾::存储:: Rackspace公司:: NOTFOUND

是否有CarrierWave或Fog设置使其更能容忍这些场景?

我刚刚遇到这个问题,发现原始问题在这里提交: github.com/jnicklas/carrierwave/issues/481和描述修复的维基页面: github.com/jnicklas/carrierwave/wiki/How-To%3A-Silently-ignore-missing-files-on-destroy-or-overwrite

但是我对解决方案不满意,我不想将这两种方法添加到我使用上传器的所有模型中.我倾向于编写1个基本上传器和子类,以满足特定需求的任何变化.所以我挖掘了这些方法:删除_#{column_name}!和remove_previously_stored _#{column_name}并在此处找到主题:github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#L204和github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#L204

这两种方法都只是调用remove!在上传者.因此,解决问题的最简单方法是覆盖删除!上传器中的方法.然后你只需要覆盖一个方法并在一个地方.我的覆盖如下所示:

class CloudfilesUploader < CarrierWave::Uploader::Base # Override to silently ignore trying to remove missing previous file def remove! begin super rescue Fog::Storage::Rackspace::NotFound end end end

当尝试重新上传图像并覆盖不存在的图像或者只是尝试删除不存在的图像时,这应该可以解决您的问题.

〜汤姆

本文共计705个文字,预计阅读时间需要3分钟。

在销毁或覆盖时,Rails、CarrierWave和Fog如何忽略丢失的文件?

在Rails中,处理丢失的附件/图像时,正确的做法是使用Fog删除记录。如果你丢失了图像并想将其导入RackSpace后清理记录,以下是一些步骤和注意事项:

1. 确保你的图像文件已成功导入到RackSpace。

2.在数据库中找到对应图像的记录。

3.使用Fog删除RackSpace上的图像。

4.在数据库中删除对应的记录。

在销毁或覆盖时,Rails、CarrierWave和Fog如何忽略丢失的文件?

注意:在删除记录前,请确保已备份相关数据,以防止数据丢失。

以下是一个示例代码片段:

ruby

找到图像记录image_record=Image.find(image_id)

使用Fog删除RackSpace上的图像fog_storage.delete(image_record.file_path)

删除数据库中的记录image_record.destroy

在尝试删除记录时,你可能遇到错误。以下是一些常见错误和解决方案:

1. 错误:找不到图像文件:确保图像文件已成功导入到RackSpace,并且`file_path`字段包含正确的路径。

2.错误:无法连接到RackSpace:检查Fog配置是否正确,包括提供正确的API密钥和区域。

3.错误:记录未找到:确保图像记录的ID正确无误。

请根据实际情况调整代码和错误处理。

Rails中的正确方法是什么是CarrierWave在丢失附件/图像时使用Fog删除/销毁记录?

我想在丢失图像导入RackSpace后清理一些记录.有一些丢失的图像和拇指.当我尝试删除记录时,我收到错误

雾::存储:: Rackspace公司:: NOTFOUND

是否有CarrierWave或Fog设置使其更能容忍这些场景?

我刚刚遇到这个问题,发现原始问题在这里提交: github.com/jnicklas/carrierwave/issues/481和描述修复的维基页面: github.com/jnicklas/carrierwave/wiki/How-To%3A-Silently-ignore-missing-files-on-destroy-or-overwrite

但是我对解决方案不满意,我不想将这两种方法添加到我使用上传器的所有模型中.我倾向于编写1个基本上传器和子类,以满足特定需求的任何变化.所以我挖掘了这些方法:删除_#{column_name}!和remove_previously_stored _#{column_name}并在此处找到主题:github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#L204和github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#L204

这两种方法都只是调用remove!在上传者.因此,解决问题的最简单方法是覆盖删除!上传器中的方法.然后你只需要覆盖一个方法并在一个地方.我的覆盖如下所示:

class CloudfilesUploader < CarrierWave::Uploader::Base # Override to silently ignore trying to remove missing previous file def remove! begin super rescue Fog::Storage::Rackspace::NotFound end end end

当尝试重新上传图像并覆盖不存在的图像或者只是尝试删除不存在的图像时,这应该可以解决您的问题.

〜汤姆