【问题标题】:How do I copy .htaccess files using Rake?如何使用 Rake 复制 .​​htaccess 文件?
【发布时间】:2015-11-02 18:18:24
【问题描述】:

我正在使用 Rake 创建一些构建脚本,这些脚本将用作通过 Docker 容器将我们的 Web 服务部署到云的整个过程的一部分。为了实现这一点,我们使用 Rake 组合来自多个 repos 的资源来“组装”目录/文件布局。除了一项,.htaccess 文件之外,这一切都很好。

这是我创建的复制功能:

require 'fileutils'

EXT_ALLOWED = ["html", "css", "js", "svg", "otf", "eot", "ttf", "woff", "jpeg", "map", "ico", "map", "png", "db", "php", "conf"]

def copy_to(dest, src, trim="")

    files = FileList.new()
    EXT_ALLOWED.each {|ext| files.include "#{src}/**/*.#{ext}"}
    files.each do |file|
        dir = File.dirname(file)
        filename = File.basename(file)
        trimming = "/shared/" + trim + "(.*)"
        path = dir.match(trimming)
        if path == nil || dest == path[1] + '/'
            bin = dest
        else
            bin = File.join(dest, path[1] + '/')
        end
        puts "copying #{file} to #{bin}"
        FileUtils.mkdir_p(bin)
        FileUtils.cp file, bin
    end

end

这个用法是:

desc 'copies from shared/admin to the base server directory'
task :admin do
    # Copy admin over
    dest = 'www-server/'
    src = '../shared/admin'
    trim = "admin/"
    copy_to dest, src, trim
end

trim 变量用于确保将文件复制到适当的目录。在这种情况下,admin 中的文件会直接复制到 www-server,而没有 admin 子目录。

我天真地尝试将"htaccess" 添加到EXT_ALLOWED 数组中,但失败了。

我也在网上关注了一些项目,但大多数都与 Octopress 有关,并不能解决问题。

.htaccess 文件位于 ../shared/admin 中,需要以 www-server/ 结尾,我可以在此函数中实现吗?还是我需要专门为以点开头的文件名写一些东西?

【问题讨论】:

    标签: ruby rake


    【解决方案1】:

    在这种情况下,为了寻找一个快速而肮脏(是的......我觉得这样做很肮脏!)选项,我编写了一个函数,专门在特定目录中查找 .htaccess 文件:

    def copy_htaccess(src, dest)
        files = Dir.glob("#{src}/.*")
        files.each do |file|
            filename = File.basename(file)
            if filename == ".htaccess"
                puts "copying #{file} to #{dest}"
                FileUtils.mkdir_p(dest)
                FileUtils.cp file, dest
            end
        end
    end
    

    以这种方式执行使用:

    desc 'copies the .htaccess file from one root to the web root'
    task :htaccess do
        src = '../shared/admin'
        dest = 'www-server/'
        copy_htaccess src, dest
    end
    

    在这里我可以使用Dir.glob() 列出所有以. 开头的文件,然后测试.htaccess 文件并执行复制。

    如果可能,我将研究修改单副本功能以使其更简洁的方法。也许这可以通过遍历目录并将以. 开头的文件添加到files 数组来完成。

    编辑: 我发现我可以在原始复制函数中将 .htaccess 文件的信息推送到 files 数组的末尾,而不是创建一个附加函数,然后先检查它是否存在于源目录中:

    if File.file?("#{src}/.htaccess")
        files.push("#{src}/.htaccess")
    end
    

    制作整个函数如下图:

    def copy_to(dest, src, trim="")
    
        files = FileList.new()
        EXT_ALLOWED.each {|ext| files.include "#{src}/**/*.#{ext}"}
        if File.file?("#{src}/.htaccess")
            files.push("#{src}/.htaccess")
        end
        files.each do |file|
            dir = File.dirname(file)
            filename = File.basename(file)
            trimming = "/shared/" + trim + "(.*)"
            path = dir.match(trimming)
            if path == nil || dest == path[1] + '/'
                bin = dest
            else
                bin = File.join(dest, path[1] + '/')
            end
            puts "copying #{file} to #{bin}"
            FileUtils.mkdir_p(bin)
            FileUtils.cp file, bin
        end
    
    end
    

    请注意,我使用.file? 来测试.exists? 可以返回目录真实性的实际文件。最后,您可以根据自己的情况使用任何一种方法。

    【讨论】:

      猜你喜欢
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      相关资源
      最近更新 更多