There's an echo in my head

日々のメモ。

ruby-2.0.0-rc2を入れた(サクッと)

@satococoa先生により、前回よりだいぶスッキリした方法でインストールできた。

環境は引き続きOSX 10.8.2。

$ RUBY_CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`" rbenv install 2.0.0-rc2

Downloading ruby-2.0.0-rc2.tar.gz...
-> http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-rc2.tar.gz
Installing ruby-2.0.0-rc2...
Installed ruby-2.0.0-rc2 to /Users/aerial/.rbenv/versions/2.0.0-rc2

$ rbenv global 2.0.0-rc2
$ gem install bundler --pre
$ gem install certified

2点ほど。

なんでRUBY_CONFIGURE_OPTS

OSXにデフォルトで入ってるOpenSSL 0.9.8rを使うと最近のRubyはSEGVするので、1.0以降を別途入れなきゃいけない。そこでruby-buildはOpenSSLの最新版をとってきて自動でインストールしようとしてくれるんだけど、2.0.0rc2ではこれがなぜかコケる。OpenSSLはHomebrewで入れられるから、ruby-buildのほうはスキップしたいよね、という文脈。

前回はRUBY_CONFIGURE_OPTSCONFIGURE_OPTSの両方を指定したけど、結局rubyのビルドのためのオプションなのだからRUBY_CONFIGURE_OPTSにまとめても十分だし、ここで--with-openssl-dirを指定すればruby-buildによるopensslのインストールもスキップされるので一石二鳥。

なんでgem install certified

Homebrewで入れたopensslだとデフォルトで証明書が入ってない。かといってオレオレ証明書を作るのも面倒くさいので、なかに証明書をもってるgemを入れちゃうことで対応する。

require "certified"
require "openssl"
require "net/https"
https = Net::HTTP.new("www.google.com", 443)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
https.verify_depth = 5
https.start { |w|
  response = w.get('/')
  puts response.body
}

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.co.jp/">here</A>.
</BODY></HTML>
=> nil

追記

証明書のくだりはcertified gemとは別に「homebrew で入れた openssl を使って Ruby をコンパイルすると SSL 利用時に証明書エラーが発生する場合の対応」にしたがってコピーしてくるほうがよさそう。

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。