Ruby 为什么西纳特拉获胜';如果';需要sinatra';在另一个文件中吗?
我有一个web.rb文件,可以正常工作。我想将所有require文件移动到一个requires.rb文件中,并从我的所有.rb文件调用此文件,并使用基于调用方文件名的条件来请求所需的内容 我在'requirepp'和'ruby-growl'上测试了它,效果很好。但是如果Ruby 为什么西纳特拉获胜';如果';需要sinatra';在另一个文件中吗?,ruby,require,Ruby,Require,我有一个web.rb文件,可以正常工作。我想将所有require文件移动到一个requires.rb文件中,并从我的所有.rb文件调用此文件,并使用基于调用方文件名的条件来请求所需的内容 我在'requirepp'和'ruby-growl'上测试了它,效果很好。但是如果require sinatra在另一个文件中,sinatra将不会加载 我可以将require sinatra放在不同的文件中吗?或者更好,一般来说,我可以在不同的文件中有要求吗 使用 ruby 1.8.7(2010-08-16
require sinatra
在另一个文件中,sinatra将不会加载
我可以将require sinatra
放在不同的文件中吗?或者更好,一般来说,我可以在不同的文件中有要求吗
使用
- ruby 1.8.7(2010-08-16补丁级别302)[i386-mingw32]
- 西纳特拉(1.3.2)
- 创业板1.3.7
- 通过
ruby script\u name.rb从dos窗口运行脚本
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需要一秒钟左右的时间
test.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服务器。而且根本没有任何信息。嗯,当你直接用ruby my_app.rb之类的东西运行Sinatra程序时,有一行空行,Sinatra可以自动启动web服务器。西纳特拉 值
:run
的默认值是通过检查:app_file
设置是否与正在执行的Ruby文件相同来确定的,即$0
西纳特拉。在这种情况下,如果在test.rb的顶部有require'sinatra'
,则:app_file
为$0
,因此sinatra启动内置服务器。当您使用test\u require.rb
时,$0
是test.rb
,但是需要Sinatra的文件和前面的:app\u file
是test\u require.rb
,并且由于它们与内置服务器不匹配,因此不会启动
要解决此问题,您可以在test.rb
(或web.rb
或任何位置)中显式设置:app_file
:
set:app\u文件,\u文件__
在你需要Sinatra之后,你需要这样做。您也可以直接设置:run
,但这样做的灵活性较低,因为每次都会运行内置服务器,如果您使用config.ru
,则不希望这样做,例如:
启用:运行
虽然这可以解决您的问题,但我个人认为最好将require'sinatra'
与sinatra代码一起保存。从另一个文件中请求应该可以。您是否首先需要rubygems
?是的,我确实需要对所有.rb文件使用rubygems。我用更多信息更新了我的问题。你能澄清一下“sinatra不会加载”是什么意思吗?我假设您的意思是请求失败,并显示错误消息。Sinatra不会加载=我没有得到通常的==Sinatra/1.3.2已在4567上进行开发,使用瘦web服务器备份(v1.2.7 codename No Hup)>>最大连接设置为1024>>侦听0.0.0.0:4567,CTRL+C停止
,我无法从浏览器访问web服务器。而且根本没有任何信息。HM,有一个空行…考虑使用BUBER而不是手动需要的东西。