Ruby Sinatra:使用来自其他文件的路由

Ruby Sinatra:使用来自其他文件的路由,ruby,routes,sinatra,rack,Ruby,Routes,Sinatra,Rack,我目前正在使用Rack和Sinatra构建一个Ruby应用程序,但在使用routes时失败了,routes是在主应用程序文件之外实现的。我的第一次尝试是这样的: 在主文件中: require 'sinatra' require 'lib/web' module NoCI class Main < Sinatra::Base include NoCI::Web load 'lib/web.rb' end end 但它没有起作用。然后我读到了关于将路线放入我的主课的

我目前正在使用Rack和Sinatra构建一个Ruby应用程序,但在使用routes时失败了,routes是在主应用程序文件之外实现的。我的第一次尝试是这样的:

在主文件中:

require 'sinatra'
require 'lib/web'

module NoCI
  class Main < Sinatra::Base
    include NoCI::Web
    load 'lib/web.rb'
  end
end
但它没有起作用。然后我读到了关于将路线放入我的主课的一个子类的内容。也没有成功。有什么提示吗,我遗漏了什么


更新:我尝试了'require'、'include'和'load',混合了所有可能的组合,对我来说没有任何效果。

你可以使用
include
钩子来实现你想要的

require 'sinatra'
require 'lib/web'

module NoCI
  class Main < Sinatra::Base
    include NoCI::Web
  end
end

当您包含此模块时,
included
中的代码将执行,
NoCI::Base
作为
Base
,您可以使用
included
钩子实现您想要的功能

require 'sinatra'
require 'lib/web'

module NoCI
  class Main < Sinatra::Base
    include NoCI::Web
  end
end

当您包含此模块时,
included
中的代码将执行,
NoCI::Base
as
Base

非常有效,非常感谢!很有魅力,非常感谢!我认为给出的答案是一个(无论多么好)解决办法。我相信真正的答案是找到的答案。为什么我现在将这个问题标记为重复。我认为给出的答案是一个(无论多么好)解决方法。我相信真正的答案是找到的答案。为什么我现在将这个问题标记为重复。
module NoCI
  module Web
    def self.included(base)
      base.get '/' do
        'Hello World!'
      end
    end
  end
end