Ruby
Rails
CentOS

CentOSで、本番環境にRubyを入れるならrbenvではなく、RHSCLがよさげ

More than 1 year has passed since last update.

はじめに

最近にわかに人気なrbenvですが、僕は本番においては使わないほうが良いのではないかと思っています。
開発環境において複数のrubyバージョンを切り替えることが出来ることは非常に便利ですが、しばらく運用してみて、本番環境においては、rbenvを使うことはメリットよりもデメリットのほうが多いように感じました。

rbenvのメリットとしては、以下の様なものがあります:

  • ディストリビューションのリポジトリが用意しているバージョン以外のrubyバージョンを入れられる
  • 複数のrubyバージョンを一つのマシンで切り替えることが出来る

しかし、rbenvには以下のデメリットも持っています:

  • 環境変数の設定を正しく行うことが難しい
  • ユーザ領域に入れる際はパーミッションの設定が難しい(動いてはいるのにワーニングが出ているプロジェクトをたまに見かけます)
  • どのシュチュエーションでどのrubyバージョンが選択されているか覚えていないといけない

自分の見ているプロダクトがどのrubyバージョンでないと動かないかは普段意識しているとは思います。
しかし、複数のrubyバージョンがインストールされている本番環境で、どのプログラムがどのバージョンで動いているかを明確に覚えているでしょうか?
ログインシェルでrubyコマンドを叩いたときそのバージョンはなんでしょう?クーロンはどのrubyバージョンを利用する設定になっていますか?ユーザが変わった場合は?

開発環境にrbenvを入れることは色々な要件を考えれば非常に適しているとおもいますが、本番環境にこのような悩み事を持ち込むことはナンセンスだと思います。昔から、本番にソフトウェアを入れるときはパッケージから入れろと言われ続けています。

本番環境において複数のrubyバージョンを切り替えて使うことがないのであれば、RHSCLからのインストールをオススメします。

特定バージョンのrubyをインストールする方法

rubyの様な更新が早いソフトウェアはすぐにディストリビューションのリポジトリのバージョンが古くなってしまいます。これがrbenvの人気の理由の一つでしょう。
しかし、リポジトリから特定のrubyバージョンをインストールする方法はあります:

  • debian系のLinux向けにはbrightboxというリポジトリがあります。ここから特定のrubyバージョンを入れることが出来ます。
  • redhat系のLinux向けにはRHSCLというリポジトリがあり、ここから特定のrubyバージョンを入れることが可能です。

レッドハットソフトウェアコレクション(RHSCL)とは

https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Developer_Guide/chap-RHSCL.html
ドキュメントにはこう書いてあります:

アプリケーションによっては、最新機能を使うためにソフトウェアコンポーネントの最新バージョンが必要になることがよくあります。Red Hat Software Collections は Red Hat のオファリングで、動的なプログラム言語のセットやデータベースサーバーを提供します。また、Red Hat Enterprise Linux のベースシステムに含まれているものと同等の関連パッケージバージョンよりも最新のもの、またはこのシステムで初めて利用可能となるパッケージを提供します。

特徴としては:

  • 通常のリポジトリには含まれていない新しいソフトウェアも利用可能になっています
  • 必要なソフトウェアのバージョンを簡単に入れることが出来ます
  • また複数バージョン入れることも可能です
  • rbenvのようにそれらの切り替えも可能になっています(sclコマンドかシェルスクリプトを使う)
  • 標準のパッケージマネージャ(yum)により管理されています

RHSCLからruby2.3を入れる方法

以下の手順で簡単にいれられます:

# centosにrhsclリポジトリを追加
sudo yum install centos-release-scl
# ruby2.3をインストール
sudo yum install rh-ruby23
# シェルでruby2.3にパスを通す
sudo ln -s /opt/rh/rh-ruby23/enable /etc/profile.d/rh-ruby23.sh

RHSCLで入れたソフトウェアはすべて/opt以下にインストールされるようになっていて、システムの標準のパッケージとコンフリクトしないように配慮されています。MacPortsにちょっと似ていますね

railsを動かしたいなら以下のパッケージを入れればよいでしょう:

sudo yum install ¥
rh-ruby23 ¥
rh-ruby23-ruby-devel ¥
rh-ruby23-rubygem-rake ¥
rh-ruby23-rubygem-bundler ¥
rh-nodejs4

おわりに

こんかいはRHSCLを紹介しました。このリポジトリには最新のコンポーネントが多くあり、このリポジトリを利用すれば、最新のソフトウェアが必要な場合でも、殆どの場合、ソースからのインストールを避けることができそうです。
コンポーネントはパッケージマネージャで入れるという、ディストリビューションの思想に従いつつ、最新の環境を構築できるよいリポジトリだと思います。
今回はrubyを例に取りましたが、python等、他にも色々な場面で活躍できそうです。

最近まで存在を知らなかったので、紹介しました。
以上、RHSCLちょっと使ってみてください。