Sinatra:使用其他文件中的路由

时间:2012-06-02 10:14:23

标签: ruby routes sinatra rack

我目前正在使用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',混合所有可能的组合,对我没用。

1 个答案:

答案 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::Basebase