我有两个名为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,它可以工作。
答案 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'