我可以在FileUtils.mkdir_p,Ruby,WIndows中使用目录环境变量吗?

时间:2015-09-17 11:49:21

标签: ruby windows directory wildcard

我想创建一个简单的函数,允许我将错误日志输出到项目目录之外的某个文件。我不希望这些随机错误日志包含在存储库中的项目文件中,而不是冒险忘记'要删除它们,我宁愿把它们写在其他地方。

我想通过在目录路径中包含%username%wildcard来使代码在不同帐户中可用。但是,FileUtils.dir_p函数会创建直接C:/Users/%username%/而不是预期的

def log_to_file(params)     
    time = Time.now.strftime('%Y-%m-%d_%H.%M.%S')

    dir = "C:/Users/%username%/Documents/RailsDevLogs/#{time.to_s}.txt" 
    #this doesn't work

    #dir = "C:/Users/majinbuu/Documents/RailsDevLogs/#{time.to_s}.txt" 
    #this works

    begin
        FileUtils.mkdir_p('C:/Users/%username%/Documents/RailsDevLogs/') 
            unless File.exist?('C:/Users/%username%/Documents/RailsDevLogs/')

        logs = File.open(dir,'a+')
        logs.write(params)
        logs.close()

    rescue => e
        puts "dir error => #{e}"
    end
end

所以我的问题是,我可以在Ruby文件字符串中使用通配符( [编辑]抱歉,环境变量),如果是这样,我该如何使用它们?

1 个答案:

答案 0 :(得分:2)

使用以下代码获取当前用户的主目录:

home_dir = ENV["HOME"]

然后你可以这样做:

FileUtils.mkdir_p("#{home_dir}/app_name/logs") 

更好的方法是允许用户通过在代码中提供config选项来指定日志目录。最简单的选择是让用户定义一个环境变量,比如MY_APP_LOG_DIR,然后执行:

log_dir = ENV["MY_APP_LOG_DIR"
FileUtils.mkdir_p("#{log_dir}") 

在Ruby中,典型的约定是使用YAML文件来指定配置。你可以阅读它们。