我的应用结构就像这样
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
,它就会起作用。
任何人都能为我解释一下吗?
答案 0 :(得分:1)
如果您有config.ru
文件,则表示该应用程序必须由rackup
实用程序调用,而不是ruby config.ru
。原因是rackup
在调用config.ru
内的代码之前设置了很多设置。 Rackup utility是Sinatra构建的Rack gem的一部分,因此如果您安装Sinatra,它将会出现。
虽然您提供的示例不是问题,但在模块化样式应用程序中,您需要sinatra/base
而不仅仅是sinatra
。