memcache和redis的连接池connection_pool使用

memcache 的Ruby客户端比较常用的是(DalliCache)[https://github.com/mperham/dalli]。 连接池项目(connection_pool)[https://github.com/mperham/connection_pool]。

>> 继续阅读 <<

在ruby中redis客户端在log上的使用

如何跟进ruby项目中redis使用的时间开销?

方法:google ruby redis logger/github redis logger, 进而找到了好一些demo可用,然后从我实际测试来看,有以下两个gem还不错,目前在我们的线上环境使用。 Gemfile添加

gem sidekiq-redis-logger

gem ‘redis_logger’, :git => “git://github.com/hellolucky/redis_logger.git”

>> 继续阅读 <<

我和jekyll、github的悲惨幸福故事

现在有各种博客服务商,但是作为一个技术人,不折腾一下自己怎么能算是技术人呢。 一直以来,我都是在这样的自我鞭策下开始我的各种折腾。

先是CSDN,JavaEye,后是百度空间,XXXX,roon.io,writings.io,再到最近的jianshu.io,logdown.com,反正是怎么折腾就怎么来。详见我的另一篇博文

回到今天的正题,技术圈一度风靡的jekyll配合github pages服务搭建自己的博客,可以绑定自己的域名,可以自定义样式,默认使用github提供的maiyang二级域名。

怎么开始呢?

>> 继续阅读 <<

苹果推送异常处理

异常”Received fatal alert: certificate_unknown”

从网络上搜索此异常,给出最多的解答是证书导出不正确。根据说明的步骤和方法再次导出后,我分别使用IntelliJ idea和Eclipse开发工具进行iOS push的时候,程序一直报错

Received fatal alert: certificate_unknown

不能不解决这个问题,所以继续google,不经意间查看到导出的p12文件跟我们的Java环境有关系。所以我把JDK7替换到了JDK6,然后继续在IntelliJ idea和Eclipse上运行,Eclipse这次居然能正确运行了,但是IntelliJ idea还是不能运行。

>> 继续阅读 <<

MacBookPro自动切换网络和代理

##背景1 在公司网络是使用dhcp分配的,但是经常要变更IP,所以我自己就使用网络偏好设置,更改为(使用dhcp-手动设定地址),保证我的IP是不变的,便于代码调试。

##背景2 有了技术问题,要找到好的解决方案,上哪儿呢?当然少不了github.com,stackoverflow.com吧,但是国内不那么容易上了。所以公司提供给我们自由翻墙的,但是需要我们设置代理。可以在网络偏好设置里面的代理,勾选上“自动发现代理”即可。

##困惑 但是,因为移动办公,免不了就要切换网络,如果每次切换还要人工设置网络,那将是多么烦心的事情。 mac电脑这么高级的东西,不至于要让我们自己来做这个重复的工作吧,答案当然是不会。

##解决方案 google搜索得到苹果官方网站就有关于网络设置

那么针对我们这里需要的无非就是两个功能了:

  1. 设置某无线网络的IP
  2. 设置是否自动发现代理

附上我的脚本

#! /bin/sh

if [ "$1" = "on" ]; then
    sudo networksetup -setmanualwithdhcprouter "Wi-Fi" 192.168.1.100
    sudo networksetup -setproxyautodiscovery Wi-Fi on
elif [ "$1" = "off" ]; then
    sudo networksetup -setdhcp Wi-Fi
    sudo networksetup -setproxyautodiscovery Wi-Fi off
else
  echo "Sorry, only on or off."
  exit 1
fi
exit 0
>> 继续阅读 <<

mac安装cocoapods不成功解决办法

cocoapods的安装办法,请参见cocoapods官网 sudo gem install cocoapods

如果我们安装失败,并提示ruby 1.9.3 类似的错误,那应该就是最新版的cocoapods不能用ruby 1.9.3来支持,而是ruby 2.0.0。

详细的解决方案见stackoverflow

摘录: Installing new Ruby version helped me. Follow these steps: rvm reinstall ruby-2.0.0-p247 --with-gcc=clang --verify-downloads 1 gem install xcodeproj gem install cocoapods I found this answer in some old Github issue.

>> 继续阅读 <<

[Ruby]gemfile.lock文件引发的困惑

Gemfile.lock的英文说明:

When you run bundle install, Bundler will persist the full names and versions of all gems that you used (including dependencies of the gems specified in the Gemfile(5)) into a file called Gemfile.lock.

Bundler uses this file in all subsequent calls to bundle install, which guarantees that you always use the same exact code, even as your application moves across machines.

Because of the way dependency resolution works, even a seemingly small change (for instance, an update to a point-release of a dependency of a gem in your Gemfile(5)) can result in radically different gems being needed to satisfy all dependencies.

As a result, you SHOULD check your Gemfile.lock into version control. If you do not, every machine that checks out your repository (including your production server) will resolve all dependencies again, which will result in different versions of third-party code being used if any of the gems in the Gemfile(5) or any of their dependencies have been updated.

Gemfile.lock用来记录Application中的依赖Gem包,并详细记录了依赖Gem包的版本。当Application的环境发生变化时,我们可以用Bundle update来更新相关依赖包,也可以保持Gemfile.lock不变.

Gemfile的管理是由bundle来做的。下面简单介绍bundle的用法。

bundle show #显示所有的依赖包 bundle check #检查系统中缺少那些项目以来的gem包 bundle install #安装项目依赖的所有gem包 bundle update #更新系统中存在的项目依赖包,并同时更新项目Gemfile.lock文件

接下来说说我遇到的问题,昨天因为性能优化,而加入了dalli cache,要更新gemfile,但是因为直接gem 'dalli'是引入的最新版本。这时直接bundle install,就会更新相互间的依赖。刚开始在本地测试一切正常。但是发布到测试环境之后就发生JBuilder解析错误wrong number of arguments (0 for 1),刚开始一直很惆怅,因为本地测试环境OK,正式测试环境就要报以上的错误,真不知道问题出在哪儿,代码都一摸一样。然后我就去取历史版本编译部署测试,从中发现有一次更新Gemfile.lock,通过比较工具发现有版本变更,然后问题也就迎刃而解了。由于我们不小心更新了Gemfile,导致版本依赖发生变化。

经验:在开发者未知情况下,一定不要随意更新Gemfile,如果要更新一定要对自己所使用的gem版本依赖有所了解,避免因为修改而导致不可预计的错误发生。

>> 继续阅读 <<

fastjson加载读取json文件

Java的json解析库(fastjson), 出品于阿里牛人@温高铁

今天的重点是fastjson读取json文件。 参考链接:Stream-api

	JSONReader reader = new JSONReader(new FileReader("./json/json.json"));
  reader.startObject();
  while(reader.hasNext()) {
        String key = reader.readString();
        VO vo = reader.readObject(VO.class);
        // handle vo ...
        // 处理vo对象,比方说插入数据库,或者获取值做其他业务逻辑功能
  }
  reader.endObject();
  reader.close();

说明:

  1. VO是我们要解析json的结果对象值。
  2. 读取的json一定要合法

想了解json的请参考这里。介绍JSON

>> 继续阅读 <<

redis在Ruby上客户端使用疑云

ruby中使用redis客户端

  1. 首先在Gemfile里面添加 gem ‘hiredis’ gem ‘redis’
  2. 然后在主目录下的application.rb文件里面添加

    case ENV[“RACK_ENV”] when “production” REDIS = Redis.new(:driver => :hiredis, :host => “10.6.4.179”, :port => 6379) when “development” REDIS = Redis.new(:driver => :hiredis, :host => “192.168.1.70”, :port => 7000) end

  3. 然后在各自的controller里面就可以直接使用REDIS的各种命令了

疑云: 如果使driver的值为synchrony时, 在并发的情况下REDIS.incr(key)得到的值有时候返回0, 在并发的情况下REDIS.smembers(key)得到字符’ok’,或者数字1,或者incr的自增数字,但是我程序里面是不可能是数字,而是类似”11123:1381120202”,至少有一个”:”。 这个异常情况很是让我捉急啊,后面我将driver替换成hiredis之后,在并发的时候就无上述问题了。 (备注:并发数很低,只是手工触发请求)

>> 继续阅读 <<

手机应用版本比较(Java&Ruby)

###手机应用应用版本比较(Java)###

>> 继续阅读 <<