How to require a ruby file from another directory
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 filerequire_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 correctlyrequire '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.