http协议默认情况下是不加密的,各种信息都是明文传送。SSL是Secure Socket Layer的简称,具体的作用就是在部署了SSL证书的网站跟用户浏览器之间建立一个安全的会话。以防止信息在互联网任何中间节点上被盗用。

购买SSL

如果购买就不赘述了,我是从 SSLs.com购买的Positive SSL,$4.99/年。可以比较下其他提供商,按需购买。

申请证书

一般购买SSL后,激活的时候会要求提供一下 CSR 的内容。CSR 就是 Certificate Signing Request 简称,需要去部署的服务器上生成一个。步骤如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl  

#生成private key
sudo openssl genrsa -des3 -out server.key 2048
这里问你输入一个passphrase,选择一个容易记得,后面会用到

#生成 CSR
sudo openssl req -new -key server.key -out server.csr

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:                  
Email Address []:
A challenge password []:
An optional company name []:

输入内容说明:

输入内容 说明
Country Name (2 letter code) 使用国际标准组织(ISO)国码格式,填写2个字母的国家代号。中国请填写CN
State or Province Name (full name) 省份,如 Beijing
Locality Name (eg, city) 城市,如 Beijing
Organization Name (eg, company) 公司名称
Organizational Unit Name 部门名称
Common Name (eg, your websites domain name) 网站域名,注意区分abc.com和www.abc.com是不同的
Email Address 邮件地址,可不填
A challenge password 可不填
An optional company name 可不填

Kindle是亚马逊推出的电纸书阅读器,采用电子墨水屏幕,其优点是非常省电且显示效果非常接近纸,可以在太阳底下阅读。前段时间入手Kindle PaperWhite后,就一直琢磨着如何把原来用Rss订阅的内容推送到kindle上来看。

可选择的方式

目前通过搜集的可行的方式大概有三种

Rss推送网站

现在有不少把RSS订阅推送到Kindle的服务,比较流行的有以下三个:

1.ReadCola

ReadCola可以生成期刊格式,便于翻阅,媲美纸质杂志;针对阅读器对图片优化,内容重新排版,提升阅读体验。支持定时推送,相比其它推送站最大的特色就是可以推送自定义的Rss并且带有图片,缺点是只支持16个订阅。

2.狗耳朵

狗耳朵内置资源非常多,包括RSS和微信公众号,支持定时推送。缺点是免费用户无法推送图片,不能添加自定义Rss,付费用户是可以的,不过费用也不算贵,现在是3元每月或30元每年。

3.Kindle4Rss

Kindle4Rss也分免费和付费用户,二则的区别如下:

最近项目技术选型从 MySQL+MongoDB 转到 PostgreSQL,但是 MongoDB 支持存储 Array 和 JSON 数据类型在某些场景下还是很方便的。比如手机通讯录里的联系人,一个联系人有多个号码、多个地址,如果使用传统的数据类型,可能要三个表来存储这些信息;另一个问题在于,一般编辑联系人的时候,会同时增删改N个号码 + N条地址,这是再去操作三个表逻辑上也会复杂不少。但是如果把多个号码和多个地址以 JSON 的 array 及 key-value 形式存储在同一个字段中,这样曾删改的时候会方便很多。索性PostgreSQL,也有相应的字段类型来支持此场景,比如 hstore。

Rails 4.1 中的一个新特性就是对 PostgreSQL 的hstore类型的支持。而 Rails 之前的版本需要安装 activerecord-postgres-hstore gem。下面说说 Rails 中使用 hstore 的方法。

增加 hstore extenstion

首先创建一个migration,启用 hstore extension。

1
2
3
4
5
6
7
8
9
class AddHstoreExtension < ActiveRecord::Migration
  def self.up
    execute "CREATE EXTENSION IF NOT EXISTS hstore"
  end

  def self.down
    execute "DROP EXTENSION IF EXISTS hstore"
  end
end

还有一种更简便的写法,不需要用 execute 执行原生的 SQL 语句。

1
2
3
4
5
6
7
8
9
class AddHstoreExtension < ActiveRecord::Migration
  def self.up
    enable_extension :hstore
  end

  def self.down
    disable_extension :hstore
  end
end

PostGIS 是关系型数据库 PostgreSQL 一个扩展,它为PostgreSQL提供了存储空间地理数据的支持,使PostgreSQL成为了一个空间数据库,能够进行空间数据管理、数量测量与几何拓扑分析。现在已经有好多为 Rails 提供地理空间数据操作的 gem。所以处理地理空间数据还是比较简单的,但是开发环境配置还有不少工作要做。

环境依赖

本文以 Mac OS X系统为例,需要安装以下内容:

  • XCode
  • Homebrew
  • Postgresql
  • Postgis
  • Ruby
  • Rails

下面单说 Postgresql 及 Postgis 安装

安装 Postgresql 和 Postgis

1
2
brew install postgresql
brew install postgis

检查系统是否正确安装 postgis

1
2
~$ psql -U username
=# select pg_available_extensions where name like ‘postgis%’;

Mac 用户还可以直接下载 Postgres.app,拖入applications文件夹。Postgres.app 包含 PostgreSQL 常用的扩展和工具:

每次安装 RMagick 这个gem都会遇到问题,并且每次的问题还都不一样,有的时候是 ImageMagick 的问题,有时候是 RMagick 不能安装,这次是安装了以后,启动Rails的时候,报错说是 libMagickCore-6.Q16.2.dylib 版本不对。错误详情如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/Users/windstill/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.12/lib/active_support/dependencies.rb:251:in `require': dlopen(/Users/windstill/.rvm/gems/ruby-1.9.3-p194/extensions/x86_64-darwin-13/1.9.1/rmagick-2.13.2/RMagick2.bundle, 9): Library not loaded: /usr/local/lib/libltdl.7.dylib (LoadError)
  Referenced from: /usr/local/lib/libMagickCore-6.Q16.2.dylib
  Reason: Incompatible library version: libMagickCore-6.Q16.2.dylib requires version 11.0.0 or later, but libltdl.7.dylib provides version 10.0.0 - /Users/windstill/.rvm/gems/ruby-1.9.3-p194/extensions/x86_64-darwin-13/1.9.1/rmagick-2.13.2/RMagick2.bundle
  from /Users/windstill/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.12/lib/active_support/dependencies.rb:251:in `block in require'
  from /Users/windstill/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.12/lib/active_support/dependencies.rb:236:in `load_dependency'
  from /Users/windstill/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.12/lib/active_support/dependencies.rb:251:in `require'
  from /Users/windstill/.rvm/gems/ruby-1.9.3-p194/gems/rmagick-2.13.2/lib/rmagick.rb:11:in `<top (required)>'
  from /Users/windstill/.rvm/gems/ruby-1.9.3-p194@global/gems/bundler-1.6.3/lib/bundler/runtime.rb:76:in `require'
  from /Users/windstill/.rvm/gems/ruby-1.9.3-p194@global/gems/bundler-1.6.3/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
  from /Users/windstill/.rvm/gems/ruby-1.9.3-p194@global/gems/bundler-1.6.3/lib/bundler/runtime.rb:72:in `each'
  from /Users/windstill/.rvm/gems/ruby-1.9.3-p194@global/gems/bundler-1.6.3/lib/bundler/runtime.rb:72:in `block in require'
  from /Users/windstill/.rvm/gems/ruby-1.9.3-p194@global/gems/bundler-1.6.3/lib/bundler/runtime.rb:61:in `each'
  from /Users/windstill/.rvm/gems/ruby-1.9.3-p194@global/gems/bundler-1.6.3/lib/bundler/runtime.rb:61:in `require'
  from /Users/windstill/.rvm/gems/ruby-1.9.3-p194@global/gems/bundler-1.6.3/lib/bundler.rb:132:in `require'
  from /Users/windstill/dev/rails/movie/config/application.rb:13:in `<top (required)>'
  from /Users/windstill/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.12/lib/rails/commands.rb:39:in `require'
  from /Users/windstill/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.12/lib/rails/commands.rb:39:in `<top (required)>'
  from script/rails:6:in `require'
  from script/rails:6:in `<main>'

使用 brew unlink libtool && brew link libtool 命令解决问题。可能会出现如下问题: