ruby – 如果’require sinatra’在另一个档案中,为什么sinatra
我有web.rb文件,工作正常.我想将所有require文件移动到一个requires.rb文件中,并从我的所有.rb文件中调用此文件,并根据调用者文件名使用条件来要求所需的内容.
我在’require pp’,’ruby-growl’上测试了它并且它运行良好.但如果要求sinatra在另一个文件中,sinatra将不会加载. 我可以在不同的文件中要求sinatra吗?或者更好一般我可以在不同的文件中要求吗? 运用 > ruby?? 1.8.7(2010-08-16 patchlevel 302)[i386-mingw32] 我的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:edutesterotherssettings.rb" require 'rubygems' require 'sinatra' if (["web"].any?{|s| called_from[s]}) UPDATE 我简化了测试用例.我有两个文件.如果我在文件中只使用test.rb和require.一切正常.如果我使用test_require.rb文件,我可以看到“加载”文本,我会说某些东西正在加载或者某些东西正在处理,因为它需要一秒左右来完成测试.rb test.rb #require "c:edutesterplaygroundtest_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服务器. Sinatra
determines whether to run this built-in server by checking whether the
:run setting is true .
value:run的默认值是通过检查:app_file设置是否与正在执行的Ruby文件相同来确定的,即$0. Sinatra determines the default value for 要解决此问题,您可以在test.rb(或web.rb或其中)中显式设置:app_file: set :app_file,__FILE__ 在你需要Sinatra之后你需要这样做.你也可以直接设置:run,虽然这样会不那么灵活,因为它每次运行内置服务器,如果你使用config.ru,你不会想要的: enable :run 虽然这应该可以解决您的问题,但我个人认为将“sinatra”与Sinatra代码保持在一起会更好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |