我目前正在使用 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”,混合所有可能的组合,但没有任何效果。
最佳答案
你可以使用included
钩子(Hook)来实现你想要的。
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
。
关于ruby - Sinatra:使用其他文件中的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10861485/