原先的一个最小的物联网系统设计方案及源码,我觉得我似乎把代码写成了,用于解释原理似乎不够简化,于是就开始寻找下一个可以替换的框架。Ruby On Rails算一个,但是考虑到不同的语言之间可能会有不同的人群。以及之前用python下的Django做了一个的RESTful服务,于是就拉到一个新的有趣的东西,即Ruby。好吧,我觉得我还不算会,但是试着写写呗。最终的上的就是用Sinatra构建一个简单的版本来替换掉现有的Laravel,需要注意的是Laravel的代码虽然看上去比较多,但是效率不会比Sinatra差。
安装Sinatra
这部分就比较简单了,参考官方的文档
gem install sinatra
接着写一个脚本
require 'sinatra'
get '/hi' do
"Hello World!"
end
似乎我们再执行一下
ruby hi.rb
打开浏览器
http://127.0.0.1:4567
就完成简单版的hello,world了。(转载保留 Phodal's Blog Phodal's zenthink)
配置mysql
然后,然后我们需要和数据库连接上,这个就是最简单不过的需要了,所以我们还需要写个Gemfilesource :rubygems
gem 'sinatra'
gem 'data_mapper'
gem 'dm-mysql-adapter'
安装上面的这些东西,一开始的时候试着用active_record,不过似乎不是很理想,或者说用sinatra+data_mapper的会比较多,大家都喜欢轻量级的。
连接数据库
添加下面代码至app.rb
require 'data_mapper'
DataMapper.setup(:default,"mysql://root:940217@localhost/iot")
这个的意思也就是连接到mysql数据库,用户名root,密码940217,数据库名iot
定义数据
然后我们先定义一下Athome
class Athomes
include DataMapper::Resource
property :id, Serial
property :sensors1, Float
property :sensors2, Float
property :temperature,Float
property :led1, Boolean
end
以便于将它转换为json
于是我们还需要
get '/',:provides=>:json do
athomes=Athomes.all
athomes.to_json
end
运行app.rb
ruby app.rb
那么我们就会得到下面的结果
[{"id":1,"sensors1":22.2,"sensors2":7.5,"temperature":19.8,"led1":false},{"id":2,"sensors1":22.0,"sensors2":7.6,"temperature":18.8,"led1":false}]
相对的比Laravel框架下的程序简单,只是不够MVC
结果
最终app.rb的代码
require 'rubygems'
require 'sinatra'
require 'data_mapper'
DataMapper.setup(:default,"mysql://root:@localhost/iot")
class Athomes
include DataMapper::Resource
property :id, Serial
property :sensors1, Float
property :sensors2, Float
property :temperature,Float
property :led1, Boolean
end
get '/',:provides=>:json do
athomes=Athomes.all
athomes.to_json
end
那么,就这样吧。
这部分代码看上去虽然比Laravel简单,但是似乎在运行的时候我们也需要考虑一下。在后面的时间里,加入其他东西后,我们再看看这个框架是否很强大,能替换原来的Laravel框架。