@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
?
@ikm github.com/sstephenson/ru… ここで--with-openssl-dirがRUBY_CONFIGURE_OPTSで指定されてるかどうかチェックしてるんですよね。無い場合は、openssl version 2 > の結果見て、インストール要るか判断みたい
— Satoshi Ebisawa ✅さん (@satococoa) 2013年2月12日
OSXにデフォルトで入ってるOpenSSL 0.9.8rを使うと最近のRubyはSEGVするので、1.0以降を別途入れなきゃいけない。そこでruby-buildはOpenSSLの最新版をとってきて自動でインストールしようとしてくれるんだけど、2.0.0rc2ではこれがなぜかコケる。OpenSSLはHomebrewで入れられるから、ruby-buildのほうはスキップしたいよね、という文脈。
前回はRUBY_CONFIGURE_OPTS
とCONFIGURE_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 利用時に証明書エラーが発生する場合の対応」にしたがってコピーしてくるほうがよさそう。