使用Sinatra配置routes.rb文件时无法获取请求

时间:2016-06-07 15:32:32

标签: ruby routes sinatra

我的应用结构就像这样

Gemfile
app.rb
config.ru
lib/routes.rb


# app.rb
require 'sinatra'
class Todo < Sinatra::Base
  set :environment, ENV['RACK_ENV']

  Dir[File.join(File.dirname(__FILE__), 'lib', '*.rb')].each {|lib| load lib}
end

#config.ru
require 'sinatra'
require 'bundler/setup'
Bundler.require

ENV['RACK_ENV'] = 'development'

require File.join(File.dirname(__FILE__), 'app.rb')

Todo.start!

#lib/routes.rb
get '/' do
  "Hello world"
end

当我使用ruby config.rb然后找到localhost:4567时,它无法识别路线/。但是,如果我将代码get '/' do移动到class Todo,它就会起作用。

任何人都能为我解释一下吗?

1 个答案:

答案 0 :(得分:1)

如果您有config.ru文件,则表示该应用程序必须由rackup实用程序调用,而不是ruby config.ru。原因是rackup在调用config.ru内的代码之前设置了很多设置。 Rackup utility是Sinatra构建的Rack gem的一部分,因此如果您安装Sinatra,它将会出现。

虽然您提供的示例不是问题,但在模块化样式应用程序中,您需要sinatra/base而不仅仅是sinatra