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

标签 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”,混合所有可能的组合,但没有任何效果。

最佳答案

你可以使用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/

相关文章:

ruby-on-rails - 让 Rails URL 助手自动输出 https url

mysql - 基于DNS的反向代理多个mysql主机

ruby - 与 sinatra 的 Authlogic?

ruby-on-rails - 在 Ruby 中将 UTC 时间戳转换为 ISO 8601

ruby-on-rails - Ruby 中的异常处理 - 如果需要救援,则调用 begin

methods - 翘曲的根路径示例?

ruby-on-rails - to_json 将单个对象包装在数组中?

ruby - 在应用程序之间共享过滤器

html - 努力查看我的 HTML 输出中的所有数据库条目

ruby - 如何使用 Nginx 在 Passenger 中运行 Sinatra App?