如何从rakefile访问公共目录

时间:2013-10-20 08:50:11

标签: ruby rake jekyll octopress rakefile

我在octopress的rakefile中创建了一个自定义部署方法。功能很简单,

我希望能够:

rake生成并将所有文件放在我的公共文件夹中(即:/ home / jeremy / website / wwwdata) 然后我希望能够“rake compress”并从输出文件夹中的文件中删除所有多余的空格和空白行(我将上传到我的服务器)。

到目前为止,我有这个:

desc "compress output files"
task :compress do
    puts "## Compressing html"
    # read every .htm and .html in a directory

#TODO: Find this directory! 

puts public_dir

    Dir.glob("public_dir/**/*.{htm,html}").each do|ourfile|
    linedata = ""
    #open the file and parse it
    File.open(ourfile).readlines.each do |line|
        #remove excess spaces and carraige returns
        line = line.gsub(/\s+/, " ").strip.delete("\n")
        #append to long string
        linedata << line
    end
    #reopen the file
    compfile = open(ourfile, "w")
    #write the compressed string to file
    compfile.write(linedata)
    #close the file
    compfile.close
    end 
end

我遇到的问题是找到输出目录。我知道它在_config.yml中指定,它显然在rakefile中使用,但每次我尝试使用任何这些变量时它都不起作用。

我用Google搜索并阅读了文档但找不到多少内容。有没有办法获得这些信息?我不想要一个硬编码的文件路径,因为当我完成它时,我想将它作为插件或拉取请求提交,以便其他人可以使用它。

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式访问Jekyll配置:

require 'jekyll'

conf = Jekyll.configuration({})
#=> {
#     "source"      => "/Users/me/some_project",
#     "destination" => "/Users/me/some_project/_site",
#     ...
#   }

conf["destination"]
#=> "/Users/me/some_project/_site"

您可以这样在Rakefile中使用它:

require 'jekyll'
CONF = Jekyll.configuration({})

task :something do
  public_dir = CONF["destination"]

  Dir.glob("#{public_dir}/**/*.{htm,html}").each do |ourfile|

    # ...

  end
end

请注意,我在#{}的参数中添加了public_dir Dir.glob,否则这将寻找文字目录public_dir/而不是实际的目标目录。