以下是最近今天学习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上看看基础重新学习。