【问题标题】:Can I use directory environment variables in FileUtils.mkdir_p, Ruby, WIndows?我可以在 FileUtils.mkdir_p、Ruby、Windows 中使用目录环境变量吗?
【发布时间】:2015-09-17 11:49:20
【问题描述】:

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

我想通过在目录路径中包含 %username% 通配符来使代码在不同帐户中可用。但是,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 文件字符串中使用通配符([EDIT] sorry, ENVIRONMENT VARIABLES)吗?如果可以,我该如何使用它们?

【问题讨论】:

  • %...% 不是通配符,它​​代表环境变量
  • 您的代码中没有通配符。你能澄清你的问题吗?您的确切问题是什么?您使用通配符的程度如何准确?请使用通配符实际显示代码。
  • 很抱歉在 Windows 操作系统目录参考/命令术语/行话中不是 Pi、Pie、Pye-hot(您的计算大师赛中接受的任何术语)。我的意思是“环境变量”(感谢您愉快地纠正我的 Wand Maker)。在您的无用回复@Jörg W Mittag 中,无需被动攻击、粗鲁或傲慢。我发现 stackoverflow 是网络上最有用的资源之一。然而,它被用户毁掉了,他们让缺乏经验/热情的学习者看起来不受欢迎。
  • @JayJay 不要认为 Jorg 很粗鲁,他用了两次“请”。他的回答通常非常详尽且内容丰富——他可能是在完全理解问题后确保自己给出答案。放轻松,把上面的评论删掉也不错。

标签: ruby windows directory wildcard


【解决方案1】:

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

home_dir = ENV["HOME"]

那么你可以这样做:

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

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

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

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

【讨论】:

  • 干杯,这就是我想要的 - 为术语混乱道歉 - 这可能是我的问题的路径!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多