Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 压缩目录中的所有文件_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 压缩目录中的所有文件

Ruby on rails 压缩目录中的所有文件,ruby-on-rails,ruby,Ruby On Rails,Ruby,我使用RubyZip试图压缩目录中的所有文件。这是我的班级: require 'zip/zip' require 'zip/zipfilesystem' class Lesson < ActiveRecord::Base attr_accessible :attachment, :course_id, :goal, :title, :assets_attributes belongs_to :course has_many :assets, :dependent

我使用RubyZip试图压缩目录中的所有文件。这是我的班级:

require 'zip/zip'
require 'zip/zipfilesystem'

class Lesson < ActiveRecord::Base
    attr_accessible :attachment, :course_id, :goal, :title, :assets_attributes
    belongs_to :course
    has_many :assets, :dependent => :destroy
    accepts_nested_attributes_for :assets, :reject_if => lambda { |a| a[:asset_file_name].blank? }

    def bundle
    bundle_filename = "public/attachments/#{self.id}/#{self.id}.zip"

    Zip::ZipFile.open(bundle_filename, Zip::ZipFile::CREATE) {
    |zipfile|
        Dir.foreach("public/attachments/#{self.id}") do |item|
        zipfile.add( item, "public/attachments/")
      end
   }

    File.chmod(0644, bundle_filename)
    self.save
    end
end
需要'zip/zip'
需要“拉链/拉链系统”
课程:销毁
接受:assets的_嵌套的_属性_,:reject _if=>lambda{a | a[:asset _file _name]。空白?}
def包
bundle_filename=“public/attachments/#{self.id}/#{self.id}.zip”
Zip::ZipFile.open(bundle\u文件名,Zip::ZipFile::CREATE){
|拉链|
目录foreach(“public/attachments/#{self.id}”)do | item|
zipfile.add(项目“公共/附件/”)
结束
}
chmod文件(0644,bundle_文件名)
自救
结束
结束

目前,这正在使用我想要的名称创建zipfile,但目录中的文件压缩不正确。它们不是压缩为文件而是压缩为目录。

如果您在Linux服务器上运行,您可以尝试:


第一行将
public/attachments/{self.id}
中的所有内容压缩到tmp目录中的一个文件(
tmp_filename
)。然后将此文件移动并重命名为
bundle\u filename

如果您在Linux服务器上运行,您可以尝试:


第一行将
public/attachments/{self.id}
中的所有内容压缩到tmp目录中的一个文件(
tmp_filename
)。然后您将此文件移动并重命名为
bundle\u filename

您可以提供更详细的信息吗:您预期的输出是什么,实际得到的是什么?“…压缩为文件,但压缩为目录…”可以用两种方式解释,因此请澄清。您能否提供更详细的信息:您预期的输出和实际得到的输出是什么?“…压缩为文件,但压缩为目录…”可以用两种方式解释,因此请澄清。我的意思是,它使用我要从尝试的主目录压缩的文件名创建目录。例如,如果dir中存在一个名为readme.txt的文件,则zipfile中的“readme.txt”将被添加为文件夹,而不是预期的文本文件。我的意思是,它使用我希望从主目录压缩的文件名创建dir。例如,如果dir中存在一个名为readme.txt的文件,则zipfile中的“readme.txt”将添加为文件夹,而不是预期的文本文件。
tmp_filename = UnixUtils.zip "public/attachments/#{self.id}"
bundle_filename = "public/attachments/#{self.id}/#{self.id}.zip"
FileUtils.mv tmp_filename, bundle_filename
File.chmod 0644, bundle_filename