Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Rake和当前目录_Ruby_Rake - Fatal编程技术网

Ruby Rake和当前目录

Ruby Rake和当前目录,ruby,rake,Ruby,Rake,如何获取rakefile.rb所在的目录 我想用它作为我的根目录来定位所有内容。如果这是一个RoR应用程序,你的Rakefile.rb应该在你的RAILS\u根目录中。因此,在任何脚本中,都可以指定文件位置,如 config.load_paths += %W( #{RAILS_ROOT}/extras ) 使用\uuuu FILE\uuuu获取文件名,然后您可以从那里获取目录: 在test.rb中 puts __FILE__ 输出: /users/foo/test.rb \uuuu文件\

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


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

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

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

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

test.rb中

puts __FILE__
输出:

/users/foo/test.rb
\uuuu文件\uuuu
解析为其所在文件的完整路径

使用此选项获取目录名称:

File.dirname(__FILE__)

您可以通过调用application.original_dir方法来获得它。在任务中,您可以使用任务对象上的应用程序方法实现应用程序对象。

为什么不直接使用Dir.pwd


从Ruby 2开始,您可以使用它来获取包含当前脚本的目录。

您考虑过Dir.pwd的答案吗?似乎更合适:Dir.pwd在启动rake命令时提供您所在的目录。这不一定是rakefile的位置,问题是您可能会从其他目录调用rakefile,比如:$rake-f subdir/rakefile,您可能需要rakefile所在的路径,因为您可能需要其他可用的依赖项。使用Dir.pwd将为您提供当前的工作目录,但这不是您的其他依赖项所在的位置(例如,假设您有jar文件),这在很大程度上是正确的,但在Rakefile需要其他文件并且该文件需要知道Rakefile的位置的情况下是错误的;在这种情况下,
Rake.application.original_dir
就是您想要的。我认为这并不能解决OP的问题,但这是我一直在寻找的答案。:)在更高版本的Rake中,我看到的是Rake.original\u diroriginal\u dir似乎返回运行Rake时的dir,而不是包含Rakefile的dir。我只是检查了文档并编写了一些测试代码,但找不到一种方法来确定……您可以在方法raw_load_rakefile中看到,位置被分配给一个位置变量,显示给STDOUT,然后被丢弃;没有办法找回它(()更新:您可以调用raw_load_rakefile本身调用的方法(find_rakefile_location)再次执行递归rakefile搜索,并将位置返回给您。仍然无法相信此值尚未转换为属性。。。