以下是最近今天学习sinatra等框架的使用笔记。
sinatra
参考文档 http://www.sinatrarb.com/intro.html
个人感觉类似Spring MVC,主要学习了
- URL映射
- 参数
- 静态文件
- 模板处理(ERB)
- 变量传递
sinatra很容易上手,helloworld非常快。
require 'sinatra' get '/' do 'Hello, world!' end
获取请求字符串的参数用上下文变量params
,比如/foo?id=1
中的params['id']
。
静态文件,默认在同级目录public
中,比如你定义这样的模板
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Sinatra Hi</title> </head> <body> <%= Time.now %> <script async defer src="main.js"></script> </body> </html>
这里的main.js为同级目录public/main.js。
模板有很多,这里选择Rails默认的ERB。模板默认位置为views,命名为view_name.erb,比如下面第一段代码对应views/index.erb
get '/' do erb :index end get '/view-var' do @user = 'xnnyygn' erb '<%= @user %>' end
代入变量很重要,sinatra这里的语法和rails很像,就是@开始的变量,erb中可以引用。这里的变量数据如果从数据库中取的话,一个简单的网站原型就有了。
activerecord
脱离rails使用activerecord并不是很复杂,有点类似直接用JDBC,基本用法
require 'active_record' require 'sqlite3' require 'yaml' # # database.xml # # adapter: sqlite3 # database: db.sqlite3 # db_cfg = YAML::load_file('database.yml') ActiveRecord::Base.establish_connection(db_cfg) class User < ActiveRecord::Base end puts User.count
主要是加载数据库配置,创建连接,定义ORM模型,执行。
唯一有点不明确的是,哪里可以释放连接?
grape
另外一个还学习了的是grape,一个快速创建Restful接口的框架。个人感觉直接用rails也可以,不过对Restful接口来说rails的view层是多余的,裁剪成restful层+数据层差不多。
grape编写和启动与sinatra不同,需要rackup。对于我这个rack外行来说还需要花点时间理解。之后我是参照https://github.com/3scale/sentiment-api-example/tree/master/version_1这里的样子编写的,有一个config.ru。主体部分是一个用上面那段activerecord代码去取的:
. ├── app │ └── app.rb ├── config.ru ├── database.yml ├── db.sqlite3 └── models └── users.rb
config.ru
$:.unshift "./app" require 'app' run PG::API
app.rb
require 'active_record' require 'sqlite3' require 'yaml' require 'grape' require File.expand_path('models/users.rb') # load database configuration db_cfg = YAML::load_file(File.expand_path('database.yml')) ActiveRecord::Base.establish_connection(db_cfg) module PG class API < Grape::API version 'v1' format :json resource :users do desc 'Return all users' get :all do User.find(1) end end end end
注意下require的ruby代码的路径,虽然有一层app目录,但执行此文件是在根目录。
最后访问http://localhost:9292/v1/users/all
应该就可以得到数据。
以上就是最近学习的一点ruby相关的知识。下一步可能会从ruby china上看看基础重新学习。