"require File.expand_path('../../config/environment', __FILE__)"的确切含义是什么?

10

我一直在努力深入理解Ruby,在拆解一个样板Rails应用程序时,似乎是了解编写跨不同文件和目录的Ruby应用程序的一些细节和优雅之处的好方法。

在我的当前应用程序中,文件之间的'requires'依赖关系正在变得有些棘手(我发现我需要做类似于requires '../../../lib/helper'的事情,这有点丑陋。

我注意到Rails应用程序似乎没有遇到这个问题。

我确实注意到这行代码:

require File.expand_path('../../config/environment', __FILE__)

当我在谷歌上搜索时,我发现有很多关于Rails启动程序等方面的解释,但没有明确说明那行代码究竟是做什么的。

在我的旅程中,我也遇到了这一行:

$:.push File.join(File.dirname(__FILE__))

我一直在想这些东西是否可能是我的问题的潜在解决方案。请问有人能够解释一下它们究竟是用来做什么的吗?

2个回答

7

__FILE__ 是相对于当前目录的文件路径。使用 File.expand_path 可以获取文件的绝对路径,因此在你的问题中需要 environment.rb 文件。

$: 包含所需路径的数组,因此 $:.push 将你提供的路径添加到所需路径列表中,以便你可以在应用程序中引用该文件。Rails 在启动过程中推送各种文件。


6
__FILE__ 不是相对路径,它只返回代码所在文件的文件名。 - PericlesTheo

1

File.expand_path('../../config/environment', __FILE__) 返回 environment.rb 文件的绝对路径,该文件位于包含此代码的文件两级下面的 'config' 目录中。

require 然后让您可以访问在 environment.rb 文件中定义的 Ruby 代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接