如何在ruby中要求文件?

时间:2013-12-17 10:26:31

标签: ruby

我有两个名为sample和dbConnect的文件,其中有一个类中的方法。我需要在sample中调用这些方法。我尝试在示例中要求dbConnect文件。 我的代码是require 'filename'。但它会引发错误。 我哪里错了?我正在学习ruby启动器,所以这可能是一个愚蠢的问题。请帮助我。

更新:

$LOAD_PATH.unshift(File.dirname(__FILE__))
require  'dbConnect.rb'

它说,

sample.rb:4:in `require': ./lib/clsDataEngine.rb:3: class/module name must be CONSTANT (SyntaxError)
from sample.rb:4

我尝试过像这样的完整路径

require '/home/kshanmugharaj/Projects/ruby/lib/clsDataEngine.rb'

因为它说,

require': /home/kshanmugharaj/Projects/ruby/lib/clsDataEngine.rb:3: class/module name must be CONSTANT (SyntaxError)

我的要求是我在同一个文件夹中有两个文件。我需要从sample中调用dbConnect中的方法。

我该怎么办? 请帮帮我......

工作: - 我写错了名字。我使用UpperCase作为起始字母的DBConnect,它可以工作。

4 个答案:

答案 0 :(得分:1)

你可以用不同的方式要求ruby模块,下面是一个例子。

$: << File.dirname(__FILE__)

require 'csv_exp/version'

// base,client,util are sub folders inside csv_exp(folder) gem 
command_files = "../csv_exp/{base,client,util}/*.rb"
Dir[File.expand_path(command_files, __FILE__)].each do |file|
  require file
end

我希望,这对你有所帮助。

答案 1 :(得分:0)

你走了:

$:.unshift File.dirname(__FILE__)

您需要这样做,因为您的文件不在加载路径中。否则,您可以提供ruby文件的完整o相对路径,如:

require '/home/foo/filename'

require './filename'

答案 2 :(得分:0)

该文件必须位于lib全局变量中存储的路径的$:文件夹中。因此,请确保您的库位于路径上。简单的方法是使用bundler。它会将您的lib路径$:扩展为一个,其中已包含所有gem库。您应该在Gemfile中指定所有宝石。

<强>的Gemfile

gem 'your_db_driver_gem'

<强> ruby​​_script.rb

require 'your_db_driver_lib'

解决方法方法是指定库的完整路径:

require '/full/path/to/the/library/filename'

答案 3 :(得分:0)

您应该显示您在问题上遇到的错误。

尝试:

require_relative 'path_to_file_you_want'

请勿使用扩展名.rb,仅使用文件名。

示例:

在/ lib上有一个名为sample.rb的文件和一个名为dbConnect.rb的类文件 在sample.rb上你可以使用:

require_relative 'lib/dbConnect'