我有 web.rb 文件可以正常工作。我想将所有需要文件移动到一个 requires.rb 文件中,并从我的所有 .rb 文件中调用此文件,并使用基于调用者文件名的条件来要求所需的内容。
我在'require pp'、'ruby-growl'上对其进行了测试,并且效果很好。require sinatra
但如果 sinatra在另一个文件中,则不会加载。
我可以require sinatra
在不同的文件中吗?或者一般来说我可以在不同的文件中有更好的要求吗?
使用
- ruby 1.8.7 (2010-08-16 补丁级别 302) [i386-mingw32]
- 西纳特拉 (1.3.2)
宝石 1.3.7
从dos窗口运行脚本
ruby script_name.rb
下面是我的 requires.rb 中的几行。当我运行 web.rb 时,我可以看到文本“加载网络需要”。请注意,所有 .rb 文件都需要“rubygems”。如果我评论 `require 'sinatra' 我会收到一条错误消息 'web.rb:17: uninitialized constant Rack (NameError)'。如果没有注释 require ,则 ruby 完成后屏幕上没有任何消息,也没有错误消息。
called_from=caller[0].split(":")[0]
puts "loading web 'requires' for file: #{called_from} ..." if (["web"].any?{|s| called_from[s]})
require "c:\\edutester\\others\\settings.rb"
require 'rubygems'
require 'sinatra' if (["web"].any?{|s| called_from[s]})
更新
我简化了测试用例。我有两个文件。如果我在文件中只使用 test.rb 和 require 。一切正常。如果我使用 test_require.rb 文件,我可以看到“正在加载”文本,我会说正在加载或正在处理某些内容,因为完成 test.rb 需要一秒钟左右的时间
测试.rb
#require "c:\\edutester\\playground\\test_require.rb"
require 'rubygems'
require 'sinatra'
get '/' do
"yes"
end
和 test_require.rb
puts "loading..."
require 'rubygems'
require 'sinatra'
Sinatra 无法加载 = 我没有得到通常的内容
== Sinatra/1.3.2 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.2.7 codename No Hup)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4567, CTRL+C to stop
我无法从浏览器访问 Web 服务器。而且根本没有消息。嗯,有一个空行