如何使用 Rake 复制 .htaccess 文件?
How do I copy .htaccess files using Rake?
我正在使用 Rake 创建一些构建脚本,这些脚本将用作通过 Docker 容器将我们的 Web 服务部署到云的整个过程的一部分。为了实现这一点,我们使用 Rake 将来自多个 repos 的资源组合到 "assemble" directory/file 布局。除了一项 .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/
中结束,我可以在这个函数中实现吗?或者我需要专门为以点开头的文件名写一些东西吗?
在这种情况下,寻找一个快速而肮脏的(是的......我觉得这样做很肮脏!)选项,我写了一个函数专门在特定目录中查找 .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?
可以 return 目录真实性的实际文件。最后,您可以根据自己的情况使用任何一种方法。
我正在使用 Rake 创建一些构建脚本,这些脚本将用作通过 Docker 容器将我们的 Web 服务部署到云的整个过程的一部分。为了实现这一点,我们使用 Rake 将来自多个 repos 的资源组合到 "assemble" directory/file 布局。除了一项 .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/
中结束,我可以在这个函数中实现吗?或者我需要专门为以点开头的文件名写一些东西吗?
在这种情况下,寻找一个快速而肮脏的(是的......我觉得这样做很肮脏!)选项,我写了一个函数专门在特定目录中查找 .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?
可以 return 目录真实性的实际文件。最后,您可以根据自己的情况使用任何一种方法。