临时文件停止存在于块外的实例变量中
Tempfile stops existing in instance variable outside of block
我有这个方法,用于将文件从活动存储复制到存储在实例变量上的临时文件
def initialize(activity)
ActiveStorage::Downloader
.new(activity.original_activity_log_file)
.download_blob_to_tempfile do |tempfile|
@activity_file_temp = tempfile
ap @activity_file_temp.path
end
ap @activity_file_temp.path
end
当我运行这段代码时,我看到了输出
"/tmp/ActiveStorage-32-20190316-23089-fdwpa5.fit"
nil
为什么文件在第二次打印时不再存在?这感觉像是一个范围问题,但我认为实例变量不应该受到这样的影响。
def initialize(activity)
@activity_file_temp = Tempfile.new
begin
ActiveStorage::Downloader
.new(activity.original_activity_log_file)
.download_blob_to(@activity_file_temp)
ensure
@activity_file_temp.close
end
end
Tempfile#close
在对象完成之前不会取消链接文件。
我通过使用 download_blob_to
方法解决了这个问题,该方法保存到您提供的临时文件而不是返回一个。
我有这个方法,用于将文件从活动存储复制到存储在实例变量上的临时文件
def initialize(activity)
ActiveStorage::Downloader
.new(activity.original_activity_log_file)
.download_blob_to_tempfile do |tempfile|
@activity_file_temp = tempfile
ap @activity_file_temp.path
end
ap @activity_file_temp.path
end
当我运行这段代码时,我看到了输出
"/tmp/ActiveStorage-32-20190316-23089-fdwpa5.fit"
nil
为什么文件在第二次打印时不再存在?这感觉像是一个范围问题,但我认为实例变量不应该受到这样的影响。
def initialize(activity)
@activity_file_temp = Tempfile.new
begin
ActiveStorage::Downloader
.new(activity.original_activity_log_file)
.download_blob_to(@activity_file_temp)
ensure
@activity_file_temp.close
end
end
Tempfile#close
在对象完成之前不会取消链接文件。
我通过使用 download_blob_to
方法解决了这个问题,该方法保存到您提供的临时文件而不是返回一个。