Apache上でRailsのアプリケーションを動かして、最終的にブラウザで「Hello」を表示させます。今回はRailsを実行するためのApacheモジュールをPassenger(パッセンジャー)を入れます。

Ralisを動かすまでの手順

rubyとRailsのインストール

まずはApacheを入れずに、Ralisを動かします。

Gitをインストール

$ yum -y install git

必要な各パッケージをインストール

$ yum -y install gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel

GitHubからrbenvを~/.rbenv(ホームディレクトリ直下の.rbenvフォルダ)にダウンロード

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

ruby-buildのインストール

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

~/.bash_profileにパスを通します

echo '# rbenv' >> ~/.bash_profile
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ exec $SHELL --login

rbenvのインストール

$ rbenv install -v 2.4.3

インストールしたRubyを使用可能な状態にします(shimsへの反映)

$ rbenv rehash

rbenvのバージョン2.4.3を使用するように設定します

$ rbenv global 2.4.3

rubygemsをインストール

$ yum -y install rubygems

railsとその他、必要そうなものをインストール

$ gem install rails
$ gem update --system

bundlerをインストール

$ gem install bundler
$ gem install ruby-mysql
$ rbenv rehash
$ yum install sqlite-devel
$ gem install sqlite3

ralisプロジェクトの作成

作業ディレクトリを作成し、作成したディレクトリに移動します

$ mkdir -m 777 /var/project && cd /var/project
$ bundler init
Writing new Gemfile to /var/project/Gemfile

bundler initで作成したGemfileファイルを編集します

$ vi Gemfile

gem "rails"のコメントアウトを外し、railsを有効にします

# frozen_string_literal: true

source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

gem "rails"
$ bundle install --path vendor/bundle
$ bundle exec rails new .
Overwrite /var/app/Gemfile? (enter "h" for help) [Ynaqdhm]  # エンターキーを押す

Gemfileを再編集します。

$ vi Gemfile

一番下に追記します。

gem 'jquery-rails'
gem 'execjs'
gem 'therubyracer'
$ bundle install --path vendor/bundle

ポート番号3000で接続出来るよう、ファイアウォールの設定をします。

$ firewall-cmd --permanent --add-port=3000/tcp

設定を反映します。

$ firewall-cmd --reload

railsを起動します。

$ bundle exec rails s

http://xxx.xxx.xxx.xxx:3000
Railsのデフォルト情報ページが表示されていればOKです。

ralis_apache2

Ralisを実行中に以下のエラーが出たら、Gemfileを編集します。

Error loading the 'sqlite3' Active Record adapter. Missing a gem it depends on? can't activate sqlite3 (~> 1.3.6), already activated sqlite3-1.4.0. Make sure all dependencies are added to Gemfile. (LoadError)

エラー対応

Gemfileを開きます。
$ vi Gemfile

gem 'sqlite3'をコメントアウトし、【gem 'sqlite3', '~> 1.3.6'】を追記します。
# gem 'sqlite3'
gem 'sqlite3', '~> 1.3.6'

bundle installを実行します。
$ bundle install

hello_controllerの作成

$ bundle exec rails generate controller Hello index

Ralisのコントローラーに移動し、rubyのファイルを編集します。

$ cd /var/project/app/controllers
$ vi hello_controller.rb

class HelloController < ApplicationController
  def index
    render text: `ruby -v`
  end
end

Apacheの導入

ここからApacheをインストールして、Ralisを起動させるための準備をします。
Apacheインストール

$ sudo yum install httpd httpd-devel curl-devel
$ sudo systemctl enable httpd.service
$ sudo systemctl start httpd.service
$ sudo systemctl status httpd.service

ファイアウォールの設定をします。

$ firewall-cmd --add-service=http --zone=public --permanent
$ firewall-cmd --reload

passengerインストール(-Nは「--no-rdoc」「--no-ri」をまとめたもの)

$ gem install passenger -N
$ passenger-install-apache2-module
$ sudo vi /etc/httpd/conf.d/passenger.conf
LoadModule passenger_module /home/testuser/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/passenger-6.0.1/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
    PassengerRoot /home/testuser/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/passenger-6.0.1
    PassengerDefaultRuby /home/testuser/.rbenv/versions/2.4.3/bin/ruby
</IfModule>
$ sudo vi /etc/httpd/conf/httpd.conf
#ServerName www.example.com:80 
ServerName http://xxx.xxx.xxx.xxx:80
$ sudo vi /etc/httpd/conf.d/rails.conf
<VirtualHost *:80>
  ServerName http://xxx.xxx.xxx.xxx:80
  DocumentRoot /var/app/project/public
  RailsEnv development
  PassengerEnabled on
  ErrorLog /var/log/httpd/error_log
  CustomLog /var/log/httpd/access_log combined
  AddDefaultCharset UTF-8
  <Directory /var/app/project/public>
     AllowOverride all
     Require all granted
     Options -MultiViews
  </Directory>
</VirtualHost>

apacheが正しく起動出来るか構文のチェックを行います。

$ apachectl configtest
Syntax OK
$ sudo systemctl restart httpd.service

http://xxx.xxx.xxx.xxx/hello/index

これで「Hello#index」が出ていればOKです。
ralis_apache

用語

  • rbenv:複数のRubyのバージョンを管理するものです。
  • rubygems:Rubyのパッケージ管理システムで、コマンド名はgemです。
  • bundler:Gemの依存管理ツール。PHPでいうComposerのことです。
  • Gemfile:Railsアプリで利用するgemが記述されているファイルの事で、このファイルにインストールしたいgemを列挙します。