【问题标题】:Rake and current directory耙子和当前目录
【发布时间】:2010-09-19 04:32:32
【问题描述】:

如何获取rakefile.rb所在的目录?

我想用它作为我的根目录来定位所有东西。

【问题讨论】:

标签: ruby rake


【解决方案1】:

使用__FILE__ 获取文件名,然后您可以从那里获取目录:

test.rb

puts __FILE__

输出:

/users/foo/test.rb

__FILE__ 解析为它所在文件的完整路径。

使用它来获取目录名称:

File.dirname(__FILE__)

【讨论】:

  • 这大部分是正确的,但在 Rakefile 需要其他文件并且该文件需要知道 Rakefile 的位置的情况下是错误的;在那种情况下,Rake.application.original_dir 就是你想要的。
【解决方案2】:

你可以通过调用application.original_dir方法获取。在任务中,您可以使用任务对象上的 application 方法来实现 application 对象。

【讨论】:

  • 我不认为这解决了 OP 的问题,但它是 I 正在寻找的答案。 :)
  • 在 Rake 的更高版本中我有这个是 Rake.original_dir
  • original_dir 似乎返回了运行 rake 时所在的目录,而不是包含 Rakefile 的目录。我刚刚检查了文档并编写了一些测试代码,但找不到确定的方法......
  • 可以在raw_load_rakefile方法中看到,位置被赋值给一个位置变量,显示到STDOUT,然后扔掉;没有办法找回它。 :( (github.com/ruby/rake/blob/master/lib/rake/application.rb#L674)
  • 更新:您可以调用 raw_load_rakefile 本身调用的方法 (find_rakefile_location) 再次执行递归 Rakefile 搜索并将位置返回给您。还是不敢相信这个值还没有变成属性……
【解决方案3】:

为什么不直接使用 Dir.pwd

?

【讨论】:

  • 问题在于,您可能会从其他目录调用 rakefile,例如: $rake -f subdir/rakefile 并且您可能需要 rakefile 所在的路径,因为您可能需要其他可用的依赖项.使用 Dir.pwd 将为您提供当前的工作目录,但这不会是您的其他依赖项所在的位置(例如,您有 jar 文件)
【解决方案4】:

从 Ruby 2 开始,您可以使用 __dir__ instead of File.dirname(__FILE__) 来获取包含当前脚本的目录。

【讨论】:

    【解决方案5】:

    如果这是一个 RoR 应用程序,您的 Rakefile.rb 应该在您的 RAILS_ROOT 目录中。因此,在任何脚本中,您都可以指定文件位置,例如

     config.load_paths += %W( #{RAILS_ROOT}/extras )
    

    【讨论】:

      猜你喜欢
      • 2011-04-27
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多