よくわからないエンジニア

よく分からないエンジニアの日々の記録

よくわからないエンジニア

CentOS7 Ruby on Rails をインストールする(apache)

phpはなんどかインストールした事がありますが、apache環境でRuby on Rails使った事がありませんでした。業務的に今後も使わないかもしれないが、ココ数日のLPIC対策に疲れたので、息抜きに突っ込んでみることにします。

目次

passengerを導入する。

Railsをとりあえず使ってみたかったので、手元のCentOS 7.3 apache環境で動くように、Passengerを導入しようと思います。

事前知識が無いので、とりあえずググってみて以下サイトを参考にしてみます。

Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用 — Redmine.JP

なんか簡単に導入できそうですね。

# gem install passenger
-bash: gem: command not found
# yum install gem
# gem install passenger
Fetching: rake-12.0.0.gem (100%)
Successfully installed rake-12.0.0
Fetching: rack-2.0.1.gem (100%)
ERROR:  Error installing passenger:
        rack requires Ruby version >= 2.2.2.

ふむ、どうやらRubyのバージョンが古いようです。まずはRubyのバージョンアップから始めます。

rbenvのインストール

こちらもフラフラググっていると、rbenvなるRubyのバージョン管理が出来るものがあると知った。gitからrbenvを使えるようにする。

#git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
#echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
#echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

再ログインしてrbenvが導入されたか確認します。

# rbenv --version
rbenv 1.1.0-2-g4f8925a

rbenvは導入された模様。早速2.2.2より上のRubyを導入してみる。

# rbenv install -v 2.2.6
ERROR: Ruby install aborted due to missing extensions
Try running `yum install -y readline-devel` to fetch missing dependencies.
#yum insatll readline-devel
# rbenv install -v 2.2.6

インストール途中でコケたので、readline-develをインストールし、再度実行したらうまくいきました。2.2.6を使えるようにします。

# rbenv versions
  2.2.6
# ruby -v
rbenv: ruby: command not found

The `ruby' command exists in these Ruby versions:
  2.2.6

# rbenv global 2.2.6
# ruby -v
ruby 2.2.6p396 (2016-11-15 revision 56800) [x86_64-linux]

今度こそpassengerの導入

再度passengerを導入します。

# gem install passenger
Fetching: rack-2.0.1.gem (100%)
Successfully installed rack-2.0.1
Fetching: passenger-5.1.2.gem (100%)
Building native extensions.  This could take a while...
Successfully installed passenger-5.1.2
Parsing documentation for rack-2.0.1
Installing ri documentation for rack-2.0.1
Parsing documentation for passenger-5.1.2
Installing ri documentation for passenger-5.1.2
Done installing documentation for rack, passenger after 49 seconds
2 gems installed

入ったっぽい。次は対話形式のスクリプトを使って導入を進めます。

# passenger-install-apache2-module

--------------------------------------------

Checking for required software...

 * Checking for C compiler...
      Found: yes
      Location: /bin/cc
 * Checking for C++ compiler...
      Found: yes
      Location: /bin/c++
 * Checking for Curl development headers with SSL support...
      Found: yes
      curl-config location: /bin/curl-config
      Header location: /usr/include/curl/curl.h
      Version: libcurl 7.29.0
      Usable: yes
      Supports SSL: yes
 * Checking for Zlib development headers...
      Found: yes
      Location: /usr/include/zlib.h
 * Checking for Apache 2...
      Found: no
 * Checking for Apache 2 development headers...
      Found: no
 * Checking for Rake (associated with /root/.rbenv/versions/2.2.6/bin/ruby)...
      Found: yes
      Location: /root/.rbenv/versions/2.2.6/bin/ruby /root/.rbenv/versions/2.2.6/bin/rake
 * Checking for OpenSSL support for Ruby...
      Found: yes
 * Checking for RubyGems...
      Found: yes
 * Checking for Ruby development headers...
      Found: yes
      Location: /root/.rbenv/versions/2.2.6/include/ruby-2.2.0/ruby.h
 * Checking for rack...
      Found: yes
 * Checking for Apache Portable Runtime (APR) development headers...
      Found: no
 * Checking for Apache Portable Runtime Utility (APU) development headers...
      Found: no

Some required software is not installed.
But don't worry, this installer will tell you how to install them.
Press Enter to continue, or Ctrl-C to abort.

apacheを見つけられていない罠。自分の環境はソースで突っ込んでいるので、とりあえずパスを通します。

# PATH=$PATH:/usr/local/apache2/bin
# export PATH
# echo $PATH
/root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/apache2/bin
# passenger-install-apache2-module

先程のNoの部分がyesになり導入が進んでいる気配。最後にこんな事をいってきました。

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /root/.rbenv/versions/2.2.6/lib/ruby/gems/2.2.0/gems/passenger-5.1.2/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /root/.rbenv/versions/2.2.6/lib/ruby/gems/2.2.0/gems/passenger-5.1.2
     PassengerDefaultRuby /root/.rbenv/versions/2.2.6/bin/ruby
   </IfModule>

After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!

apache側の設定のようですね。これを設定側に入れれば良いのでしょうか。

apache側の設定

httpd.confを編集します。

# vi httpd.conf
   LoadModule passenger_module /root/.rbenv/versions/2.2.6/lib/ruby/gems/2.2.0/gems/passenger-5.1.2/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /root/.rbenv/versions/2.2.6/lib/ruby/gems/2.2.0/gems/passenger-5.1.2
     PassengerDefaultRuby /root/.rbenv/versions/2.2.6/bin/ruby
   </IfModule>

apacheリロード後、passengerがmoduleとして読み込まれています。時間がある時に動かしてみたいですね。

追記:その後苦労したので、気が向いたらまとめます。