我目前正在使用Rack和Sinatra构建一个Ruby应用程序,但我没有使用路由,而是在主应用程序文件之外实现。我的第一次尝试是这样的:
在主文件中:
require 'sinatra'
require 'lib/web'
module NoCI
class Main < Sinatra::Base
include NoCI::Web
load 'lib/web.rb'
end
end
并在lib / web.rb中: 要求'sinatra'
module NoCI
module Web
get '/' do
"Hello World"
end
end
end
但它没有用。然后我读到了将路由放入我的主类的子类中。也没有成功。任何提示,我都缺少什么?
更新:我尝试使用'require','include'和'load',混合所有可能的组合,对我没用。
答案 0 :(得分:4)
您可以使用included
挂钩来实现您想要的功能。
require 'sinatra'
require 'lib/web'
module NoCI
class Main < Sinatra::Base
include NoCI::Web
end
end
LIB / web.rb
module NoCI
module Web
def self.included(base)
base.get '/' do
'Hello World!'
end
end
end
end
included
中的代码将在您包含此模块时执行,NoCI::Base
为base
。