我何时必须在Rake任务中“要求”Ruby类?

时间:2015-09-28 23:40:58

标签: ruby-on-rails ruby

我正在开发一个Rake任务,它通过外部URL获取文件。为此,我必须在我的.rake文件中要求Net::HTTP Ruby类。

这对我来说似乎很奇怪,因为我没有把它作为gem加载(我实际上并没有从任何地方下载它),所以这个Ruby类必须预先安装在Rails框架中。然而,在我拥有的每个.rake文件中,我都必须RecordSet.Find。因此,出于某种原因,它必须处于非活动状态,直到我告诉它(?)。

"How to require classes that I've created in different files"相同的问题。相反,我想知道

  • 我不必将Net :: HTTP类下载并安装到我的应用程序中?
  • 为什么我在使用它时必须手动要求它,如果它已预先安装在Rails中?

2 个答案:

答案 0 :(得分:2)

Net :: HTTP是Ruby Standard Library的一部分,它与Ruby本身(不是Rails)一起分发。要使用任何标准库,您必须首先要求它们。

答案 1 :(得分:0)

  

我正在开发一个Rake任务,它通过外部URL获取文件。为此,我必须在我的.rake文件中要求Net::HTTP Ruby类。

不,你没有。你永远不会require课。 require加载文件,而不是类。

  

这对我来说似乎很奇怪,因为我没有把它作为gem加载(我实际上并没有从任何地方下载它),所以这个Ruby类必须预先安装在Rails框架中。

不,不是。它是Ruby标准库的一部分。您甚至链接到Ruby标准库的文档!

  

然而,在我拥有的每个.rake文件中,我都必须require。因此,出于某种原因,它必须处于非活动状态,直到我告诉它(?)。

是。 Ruby并不奇怪require整个世界中的每个Ruby文件。您必须手动且明确地require所需的文件。

  
      
  • 我不必将Net :: HTTP类下载并安装到我的应用程序中?
  •   

因为Net::HTTP类是在文件net/http.rb中定义的,它是作为Ruby标准库的一部分提供的。

  
      
  • 为什么我在使用它时必须手动要求它,如果它已预先安装在Rails中?
  •   

因为它像任何其他Ruby文件一样是Ruby文件,你需要告诉Ruby你想要使用哪些Ruby文件。