How to require a ruby file from another directory

蹲街弑〆低调 提交于 2019-11-28 04:57:14

require will search for files in only a set of locations referred to as the "Load Path." You can view the load path by using the global variable $LOAD_PATH in a script or irb session. If it is not in the load path, it won't find it.

Ruby 1.9 introduced require_relative which searches using the current file's location as a starting point.

# Will search $LOAD_PATH for file. 
require 'test/unit'
# Notice the '/' which tells it to look in the 
# 'test' folder for a file named 'unit.rb'

# Will look in current folder of file
require_relative 'my_folder/my_file'
# Will search in 'my_folder' for the file 'my_file.rb'

Note that require_relative will not work in irb.

Also note, that if you really want to use require, you can start your script by adding a location to the $LOAD_PATH variable.

$LOAD_PATH << File.join('users', 'yourusername', 'your_folder')
# or
$LOAD_PATH << File.dirname(__FILE__)
# The second one enables you to move the file around on your
# system and still operate correctly
require 'my_file'

Here's some additional documentation from Ruby-Doc:

From the docs: It suggests to use require relative. Docs

require_relative complements the builtin method require by allowing you to load a file that is relative to the file containing the require_relative statement.

When you use require to load a file, you are usually accessing functionality that has been properly installed, and made accessible, in your system. require does not offer a good solution for loading files within the project’s code. This may be useful during a development phase, for accessing test data, or even for accessing files that are "locked" away inside a project, not intended for outside use.

For example, if you have unit test classes in the "test" directory, and data for them under the test "test/data" directory, then you might use a line like this in a test case:

require_relative "data/customer_data_1"

Also possible to do so:

require './something.rb'

from current directory to include.

For example, you have files:

chess.rb and spec/test.rb

And you want to require the file in spec/test.rb. Use:

require_relative '../test.rb'

with two dots. With one dot './' you will have an error "cannot load such file"

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!