sinatra 默认就是一个全局 get '/' { ...},我个人不喜欢这种污染全局的绑定,所以一直在找比 sinatra 好一点又比 rails 轻的 web 框架。cuba 框架没人用了,roda 好像还在经常维护,于是试用了一下 roda。
下面是我刚才学的 roda 配置代码。想问几个问题。
$path = 'D:/pg/projs/workdir'
require 'roda'
require "#{$path}/web/html_worker.rb" # 导入类Worker
require 'erb'
$wk = Worker.new($path)
class WebApp < Roda
plugin :public, root: "#{$path}/web/f" # 用来发送静态文件
route { |r|
r.public
r.root do
return $wk.msg('你在首页')
end
r.get 'board' do
text = r.params['q']
# ...
html = $wk.write_boards_indexes(board_names)
return html
#~ return 'i know'
end
r.get 'welcome' do
# 欢迎页
html = $wk.write_welcome_page
return html
end
r.get 'readyml' do
# 新的爬虫抓取完成,需要重新读取帖子数据
$wk.read_profile
puts '重新读取帖子信息完成.'
return $wk.msg('更新完成.')
end
}
end
run WebApp.freeze.app
代码执行方式是 rackup,可以设置监听的设置:rackup -o 0.0.0.0 -p 955 # 监听本机上 055 端口。
那么在这个代码里,要怎样修改才能让 Worker.new($path) 不需要被设置成全局变量,也能在 Roda 里面被用得上呢?不是很懂 rack 和 config.ru 的设法