Blog Archives

初识OpenTSDB

1. 什么是 OpenTSDB OpenTSDB ,可以认为是一个时系列数据(库),它基于HBase存储数据,充分发挥了HBase的分布式列存储特性,支持数百万每秒的读写。 2. 架构简介 这里我们简单看一下它的架构,如下图所示。 其最主要的部件就是TSD了,这是接收数据并存储到HBase处理的核心所在。而带有C(collector)标志的Server,则是数据采集源,将数据发给 TSD服务。 3. 安装 OpenTSDB + elasticsearch plugin 为了安装 OpenTSDB ,都需要以下条件和软件: Linux操作系统 JRE 1.6 or later HBase 0.92 or later 3.1. 安装GnuPlot 如果你还想使用自带的界面,则需要安装GnuPlot 4.2及以后版本,以及gd和gd-devel等。这里我们选择了GnuPlot 5.0.1的版本。 根据情况执行(没有就装),安装所需软件 $ sudo yum install -y gd

Posted in DevOps, Tech, Web

【翻译】基于Docker的Rails集群+Ruby负载均衡代理

原作者:Muriel Salvan 原文地址:http://x-aeon.com/wp/2014/02/06/rails-cluster-with-ruby-load-balancer-using-docker/ 翻译:liubin (http://liubin.org/) 最近我发现了 Docker 这个东西。 并且我在 2014年2月的rivierarb的meet up 上做了一次演讲,资料可以在slideshare上下载(文档下载地址 https://speakerdeck.com/murielsalvan/ruby-and-docker-on-rails slideshare:http://www.slideshare.net/MurielSalvan/ruby-and-docker-on-rails,需翻墙)。 我打算做一个比较酷的使用Docker的例子:一个Rails集群,以及集群前面的一个Ruby负载均衡服务。我曾想过使用若干不同的机器(每台机器都有自己的IP地址和端口)来运行同样的Rails服务,然后在外部配置一台负载均衡的代理服务器,在各Railf服务之间进行请求分配。 不过使用Docker的话,在一台机器上就可以模拟集群环境了。 这里我们将演示一下如何来创建这个集群环境。 你可以从我的Github项目上下载所有这次测试的源代码。 创建Docker镜像 首先我将创建两个Docker镜像,1个用来运行Rails服务,1个运行Ruby代理服务。 1. 首先我制作了一个可信Docker构建(Trusted Docker build),构建脚本也在我的Github上( Github project docker-ruby )。使用这个构建脚本创建的镜像为 murielsalvan/ruby ,它基于Ubuntu Precise,并且安装了Ruby 2.1.0p0。 docker pull murielsalvan/ruby 2. 接着我基于murielsalvan/ruby来创建一个Docker容器,用来执行一个bash shell,然后在里面安装Rails并创建一个Rails应用程序。这个应用程序只有一页,它将打印出它所在服务器的主机名和IP地址(集群里的每台Rails服务都有不同的主机名和IP地址)。你可以从这里查看这个测试程序的源代码。这步的最后,我将把这个容器提交,生成一个新的镜像,并命名为murielsalvan/server,这个镜像执行的时候,会启动Rails服务,并监听3000端口号(容器内的端口号)。 docker run -t -i murielsalvan/ruby bash docker commit

Posted in go, Rails, Ruby, Tech, Web Tagged with: , ,

CodeIgniter遇到了“The filetype you are attempting to upload is not allowed.”的问题

1. 问题的引出 公司内部系统需要上传Word文档,开发用的是CI 2.1.4。 在开发和大部分人的机器上跑得都挺好的,就是有几个人说不能上传文件。查看了一下错误信息,就是: CodeIgniter: “The filetype you are attempting to upload is not allowed.” 检查服务器端的代码: 应该是支持doc和docx格式的文件上传的。 只好打出$_FILES来看看。分别在正常的机器和不正常的机器上尝试上传,发现上传文件的type不一样。 正常机器上传的时候,type是 “application/msword”,而不能正常上传的用户的这个值则为”application/kswps”。 原来如此。 2. 解决方法 解决方法就是修改应用根目录下的config/mimes.php文件,增加doc的Content-Type类型。 其中后面的’application/kswps’是我手工加的。 3. 谁设置了Content-Type 谁设置的mime type,根据什么设置的? 首先来看一下第一个问题的答案,那就是浏览器。 根据PHP的官方记载: $_FILES[‘userfile’][‘type’] 文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。

Posted in Tech, Web Tagged with: , , ,

Octokit-GithubAPI的官方Ruby实现

1.什么是Octokit Octokit是Github API的客户端实现,主要有两个版本,一个Ruby的,一个Object C的。之前这个库是由 Wynn Netherland 和 Adam Stacoviak维护的,2013年5月份,变为Github官方维护了,可以参考后面的链接。所以说,如果用Ruby语言的话,使用Octokit应该是不二之选了。 2. 在Ruby中使用Octokit 1. gem install octokit 如果是Rails的话,在Gemfile里添加gem octokit即可。 2. 测试程序 这里我们简单使用如下程序测试: 简单来说Github的API还是比较容易上手,而且功能比较全,比如能取得所有branch的信息,还能根据commit时间和author等来取得特定的提交信息,这个还是非常方便的。当然,我也只做了如此的测试而已。 3. 执行 首先在命令行下设置用户名和token。Github的API虽然用了Oauth,但是好像并没有secret,所以需要用户米和token两个参数。当然也有用户名和password的认证方法,但是一般来说如果是第三方程序,一般不会采用保存用户密码的策略。 $ export GITHUB_LOGIN=liubin0329 $ export GITHUB_TOKEN=18ed ./test.rb 上述代码可以从这里取得: https://github.com/liubin0329/for-github-api-test 官方信息: Ruby 版:https://github.com/octokit/octokit.rb octokit主页: http://octokit.github.io/ Github 官方release

Posted in Rails, Ruby, Tech, Web Tagged with: , , , , ,

Rails 4的一些新功能

总体 1. 支持Ruby 2.0 不支持Ruby1.8系了,最低也得1.9.3。 2. 动态查找器没有了 这个东西太灵活了,代码可能少敲两个字母,外人看来容易引起迷惑。 原来是 find_by_name ‘aaa’ 现在是 find_by name:’aaa’ 3. routing里禁止了裸match 即如果用match的话就必须给:via选项。 否则的话默认开启了GET和POST等,容易导致CSRF攻击。 请直接用协议,比如 post ‘controller/action’ => ‘controller#action’ 4. 增加concerns目录 为了解决业务逻辑无处可写的窘境,在controller和model各添加了标准的concerns目录,这里的文件都是autoload的。 5. 用bin目录代替script目录 不多说,rails,rake,bundle都放这里。 6. 可以在浏览器上浏览route设置。 之前需要通过rake routes命令,现在可以在浏览器通过路径/rails/info/routes来确认了。 Modle相关 7. 增加where.not 如何在sql里查找不属于某个人的东西? where name <>

Posted in Rails, Ruby, Web Tagged with: , , , , ,

在Rails下通过Google API Client访问Google Calendar接口

本文主要介绍通过使用Google API Client来在Rails应用里来访问Google Calendar接口来访问日程信息。 本文的主要代码可以从这里下载 。 1. 在Google网站创建应用程序 在Google API Console创建应用: a. 打开网址https://code.google.com/apis/console b. 点击左边API Access 菜单 c. 在API Access里面(右边)创建一个Cliend ID,注意Application Type选择Web Application 最主要的是确保callback地址正确,本例是 http://localhost:3000/gcalendar/callback,基本上这样就可以。如果调试的时候出现错误,可根据错误信息酌情修改API设置。 2. 在本地实现API调用 在服务端设置好之后,就可以在自己机器上实现API的调用代码了。 2.1. 安装 Google API Client 在工程根目录下编辑Gemfile,加入: gem ‘google-api-client’ 然后执行: bundle install 2.2.

Posted in Rails, Web

使用omniauth-bitbucket和bitbucket.org做帐号连接

1. 安装omniauth-bitbucket 首先新建一个rails的工程,具体过程就不说了,然后编辑Gemfile 其中,bitbucket_rest_api是bitbucket API的Ruby包装,这里如果不写git源的话,在我Ruby2.0+Rails4的情况下会导致hashie依赖错误。 omniauth-bitbucket是omniauth的bitbucket实现。 值得一提的是,omniauth-bitbucket 是一个杭州的工程师写的,具体可以参考其github主页。 编辑完Gemfile之后,就可以执行bundle install了。 2. 使用omniauth-bitbucket和bitbucket 2.1. 设置oauth 的provider 编辑config/initializers/omniauth.rb文件 2.2. 设置oauth认证的routing规则 编辑routes.rb 这一句,同时生成了/auth/:provider这个url,在本例里,即”/auth/bitbucket”。用户访问这个url,会立即被导向provider的认证授权页面。而授权后的callback页面,就是上面的match规则指定的url。 关于oauth认证相关的东西,代码其是很少。 2.3. 处理callback 在上面设置的callback方法里,就可以处理服务端返回的授权token了。 直接从request里即可取得auth情报,这个auth是一个AuthHash类的实例,其中最重要的信息应该就是用户的access token和secret了,可以通过: 从request里取得的auth情报,就可以做各种处理了,比如保存到数据库之类的。 现在就可以开始测试了,可以设置一个页面,里面有指向/auth/bitbucket的连接,或者直接在浏览器输入/auth/bitbucket。 2.4. 使用BitBucket 有了auth信息,就可以生产BitBucket的实例并使用了: 具体的BitBucket类和方法请参考相关Doc,也可以通过irb来确认: 3. 其它 如果不喜欢omniauth的url风格,可以在初始化的时候自己定制:

Posted in Rails, Web Tagged with: , ,

跨站点请求伪造(CSRF)及对策

今天,微博里流传着“搜狗输入法泄密事件”。 安全问题,一直以来都是关系到企业生存的重要问题,然而真正把安全问题提到重要位置的公司又有几家?据乌云漏洞的官方说法,搜狗输入法这个问题早在5月就已经提交给厂商了,然后,这一问题并没被搜狗加以重视,以至于现在在网上掀起了又一个风波。 不说公司,我们程序员在写代码的时候,又有多少人想到过如何处理安全问题?在这里,我们就来普及以下CSRF的基本知识及相关预防措施。 1. 什么是CSRF攻击 CSRF是Cross site request forgeries的首字母缩写,有时候也有人写作XSRF。 这也是和XSS,SQL注入等并列的比较常见的Web开发中的安全问题。 简单来说,就是用户在浏览a.com站点的时候,里面有一些恶意内容,在暗地里访问了另一个站点b.com的内容,从而在用户不知情的情况下做出了一些恶意操作。 2. 攻击原理 就其技术背景来说,基本上攻击目标都是需要用户登录认证后面受保护的内容,基本上都是通过cookie和session来完成操作的。 其基本攻击原理见下图: 首先,用户先按正常流程访问某一服务,并保持登录状态; 之后,在第4步的时候,用户通过邮件或者IM等,收到了具有恶意代码的攻击网址,当用户打开此攻击页面时,攻击者通过利用img,script,iframe等元素的src属性,来在用户不知情的情况下,发起对正常site的恶意访问。在图中第5步时,恶意代码已经执行完毕,完成了攻击工作。 3. 防范措施 这里总结一些基本的防范措施,包括rails和php里的基本方法。 3.1. 基本防范措施 此部分内容不局限于某一具体语言,可作为基本原则进行参考。 3.1.1. 对可能成为恶意代码寄存元素的检查 比如,尽量不让用户能自由定制带有javascript和iframe的内容; 对于用户可以上传图片,内容编辑的功能,对需要显示图片的img元素,确保对src属性进行验证。 3.1.2. 使用Cookie的HttpOnly属性 通过使用这个属性,禁止客户端脚本来访问Cookie,从而保证数据的安全。 3.1.3. 检查Referer 通过检查http header里的Referer来确认请求是否合法。 不过这个方法可能会导致编码变得复杂,因为我们必须对整个系统的所有请求链进行程序化。最严重的问题是,存在有可能会取不到Referer的情况。 3.1.4. anti CSRF token 这个方法一般被认为是最实用,且也是应用最广泛的一种方法。

Posted in Tech, Web Tagged with: ,

无觅相关文章插件,快速提升流量