Entertainer Engineering

人を楽しませられる技術者を目指すあおかびんのブログ

Rails4.1.6でbootswatchを導入したときにSSLエラーで詰まった話

こんばんは、aokabinです。

現在卒業研究でRails4.1.6を使ったアプリケーションを作ろうと思っているときに、bootswatchのcosmoを導入しようとしたのですが、importをするときに謎のSSLエラーに巻き込まれていました…


Ruby on rails4系でBootstrap系のthemeを使うときに詰まった - Entertainer Engineering

こちらに書いてあるように、importって何やねん…となっていました。
実は上の記事でもcosmoを導入していたつもりだったのですが、デフォルトのbootstrapしか適用できていない事が判明しまして…申し訳ありません。

さて、上記の記事にも書いてあるようにimportをしていた際にエラーが吐かれていました。

エラーログは割愛しますが、

OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

こんな感じのエラーが吐かれました。
ショックがハンパじゃなかったですね。

という訳で対策を書いていきます。

CA証明書を参照できるようにする

SSLエラーで言われているのは、とにかく”証明書が参照できねえよ!”ということらしいので、参照できるようにしてあげればいいわけです。

irbコマンドで、opensslが参照している証明書の場所を確認してみましょう!

irb
> require 'openssl'
> p OpenSSL::X509::DEFAULT_CERT_FILE
"/opt/local/etc/openssl/cert.pem"

すると、cert.pemへのパス情報が表示されると思います。(今回のパス情報は一例です)
そのパスをコピーしておきましょう。

そして、証明書がちゃんと存在しているかをcatコマンドで確認してみましょう。

cat /opt/local/etc/openssl/cert.pem

もし何もなければ、それは証明書を参照できていないので、cert.pemを用意してあげる必要があります。(それ以外の問題でしたら、ちょっとわかりません、ごめんなさい)

先ほどのパス(上記の場合/opt/local/etc/openssl)へと移動して、cert.pemをDLしましょう。

cd /opt/local/etc/openssl
sudo wget http://curl.haxx.se/ca/cacert.pem
sudo mv cacert.pem cert.pem

もしwgetでDLできなければ、curlやらscpやらを使ってなんとか/opt/local/etc/openssl/の中にcert.pemを入れこんであげましょう。

ねんのためcatでファイルの存在を確認

cat /opt/local/etc/openssl/cert.pem

コマンドを実行した後に、暗号化された文字列が表示されたらおそらくopensslから証明書を参照する事ができていると思います。
できていなければもう一度手順をやり直してみてください。

さて、この状態でbootswatchを試してみましょう。

rails new cosmo
cd cosmo/
vim Gemfile

Gemfileをエディタで開いたら

gem 'libv8', '~>3.11.8.13'
gem 'twitter-bootswatch-rails', '~> 3.2.0'
gem 'twitter-bootswatch-rails-helpers'
gem 'execjs'
gem 'less-rails'

これらを書き込んで上書き保存。(vimなら :wq)

bundle install #エラーがでない事を確認
rails g bootswatch:install cosmo
rails g bootswatch:import cosmo
rails g bootswatch:layout cosmo

これでテンプレートが出来上がったかと思います。

実際に出来上がっているかを確認するため、
app/views/layouts/のcosmo.html.erbをindex.html.erbに改名、そして

rails g controller layouts

を実行
config/routes.rbファイルを開いて

resources :layouts

を記述、最後に

rake routes
rails s

これでhttp://localhost:3000/layoutsにアクセスしてみましょう。
f:id:aokabin:20140918112246j:plain
このような画面が表示されていればおkです!

しかしこの間は間違った記事を出してしまった事を深く反省しております。

これでうまくいったり行かなかったりしたらコメントいただければ幸いです!