如何正确包含 Ruby rakefile 中的其他项目文件

How to correctly include other project files from Ruby rakefile

我在包含其他文件以在 Rake 文件中使用时遇到问题。例如,我有一个 version.rb 文件,其中包含我想在 rake 文件中引用的版本号,另外,我有一个 gem 规范,在 .gemspec 中指定文件,我也想在 rake 文件中使用它。我无法确定引用这两个文件的正确路径。事实上,这是我遇到最多问题的 ruby 问题(需要 statements/LOAD_PATH)并且非常令人沮丧;由于我不确定如何解决这些问题,问题变得更糟了)。我目前正在避免使用 bundler 等包句柄,因为我需要先了解基础知识。

请参阅我的代码编辑器的附件图片,其中显示了项目结构(标准 gem 结构,对于一个名为 Cart 的 gem,它只是一个用于试验的虚拟应用程序)。

因此,我的 rakefile.rb 在项目的根文件夹中。指定require时,指定的路径应该相对于哪里?它是相对于您需要的文件还是相对于 lib 文件夹或其他任何文件?我是 运行 rake -T,列出任务,这些是我看到的错误消息:

正在尝试从 Rakefile.rb:

中获取 version.rb 文件
require 'cart/version'

$ rake -T
rake aborted!
cannot load such file -- lib/cart/version
/Users/Sancho/dev/ruby/student/cart/Rakefile.rb:5:in `<top (required)>'

require 'lib/cart/version'

$ rake -T
rake aborted!
cannot load such file -- lib/cart/version
/Users/Sancho/dev/ruby/student/cart/Rakefile.rb:5:in `<top (required)>'
(See full trace by running task with --trace)

试图从 Rakefile.rb:

中要求 cart.gemspec
require 'cart.gemspec'

$ rake -T
rake aborted!
cannot load such file -- cart.gemspec
/Users/Sancho/dev/ruby/student/cart/Rakefile.rb:6:in `<top (required)>'
(See full trace by running task with --trace)

我正在使用 Ruby 版本 2.0.0,rake 版本 0.9.6(OSX Mavericks 附带的默认版本)。

(PS,我的意图是购买 Ruby IDE 像 RubyGems,但是我再次推迟,因为我想要首先学习基础知识,如果我不了解如何从第一原则解决问题,我不想依赖 IDE 解决问题。

谢谢。

When specifying a require, where should the path specified be relative to? Is it relative from the file you are requiring from or relative to lib folder or whatever else?

require_relative 将相对于调用文件。

require 查找 $LOAD_PATH 目录,除非文件路径是绝对路径。由于您的项目似乎没有在 $LOAD_PATH 中声明自己并且您的路径不是绝对的,因此找不到该文件。

因为这看起来像 gem 你试过添加标准

#this will be the absolute path to lib based on the calling __FILE__
lib = File.expand_path('../lib', __FILE__)
#this will include the path in $LOAD_PATH unless it is already included
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)

这将断言 $LOAD_PATH 中的 lib 目录,然后您可以根据 lib 的路径要求,例如require 'cart/version'