VagrantでVirtualBoxに作成した仮想マシン(CentOS7.3)にRubyをインストール

前回作成していた、仮想マシンRubyをインストールしていきたいと思います。

依存ライブラリのインストール

「依存ライブラリのインストール」を行います。

 
sudo su
yum install readline-devel zlib-devel libffi-devel libyaml-devel openssl-devel sqlite-devel

f:id:ts0818:20170924135905j:plain

 

gitのインストール

git cloneで、「rbenv」をインストールするため、「git」をインストールします。

yum install -y git

f:id:ts0818:20170924140619j:plain

 

rbenvのインストール

システムワイドで管理=全ユーザで使うようにインストールするのが良いようです。

cd /
git clone https://github.com/sstephenson/rbenv.git usr/local/src/rbenv

CentOSにrbenvをインストールする方法 - TASK NOTES

centos7でRubyをrbenvでバージョン管理する~システムワイドと特定ユーザ~ - Qiita

f:id:ts0818:20170924151009j:plain

rbenvが使用できるようにPATH(環境変数の登録)

rbenvを使えるように、環境変数にパスを通す必要があるようです。「スーパユーザー」ではなく、「一般ユーザー」に切り替えてから実行していきます。

suコマンド(ユーザーの変更)

exit
echo 'export RBENV_ROOT="/usr/local/src/rbenv"' >> /etc/profile.d/rbenv.sh
echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/rbenv.sh
echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh
source /etc/profile.d/rbenv.sh

f:id:ts0818:20170924152041j:plain

rbenvがインストールされたか確認

rbenv -v

f:id:ts0818:20170924152200j:plain

「exit」で前のユーザーに戻るやり方だと「-bash: renv: command not found」が発生。明示的に「su - ユーザー名」で切り替えるとOKっぽい。

rbenv: command not found on Linux Mint · Issue #130 · rbenv/rbenv · GitHub

 ⇧  「~/.bashrc」を変更すればOK的なことを言ってますが、今回は行っていません。

ruby-buildのインストール

rbenvだけではrubyのインストールが出来ません。ruby-build を rbenv の plugins 以下にインストールすることでrbenv installコマンドが使用できるようになります。

CentOSにrbenvをインストールする方法 - TASK NOTES

ruby-buildのインストール。 

sudo su -
git clone git://github.com/sstephenson/ruby-build.git /usr/local/src/rbenv/plugins/ruby-build

ruby-buildがインストールされたか確認。

ls /usr/local/src/rbenv/plugins/ruby-build/bin/

f:id:ts0818:20170924153351j:plain

 

インストール可能なrubyの一覧

「rbenv install -list」コマンドで確認可能です。

[root@10 ~]# rbenv install -list
Available versions:
  1.8.5-p52
  ・
  ・
  2.1.0-dev
  2.1.0-preview1
  2.1.0-preview2
  2.1.0-rc1
  2.1.0
  ・
  ・
  2.3.4
  2.3.5
  2.4.0-dev
  2.4.0-preview1
  2.4.0-preview2
  2.4.0-preview3
  2.4.0-rc1
  2.4.0
  2.4.1
  2.4.2
  2.5.0-dev
  jruby-1.5.6
  ・
  ・
  jruby-9.2.0.0-dev
  maglev-1.0.0
  maglev-1.1.0-dev
  maglev-2.0.0-dev
  mruby-dev
  mruby-1.0.0
  mruby-1.1.0
  mruby-1.2.0
  mruby-1.3.0
  ・
  ・
  rbx-2.71828182
  rbx-3.0
  ・
  ・
  rbx-3.82
  ree-1.8.7-2011.03
  ree-1.8.7-2011.12
  ree-1.8.7-2012.01
  ree-1.8.7-2012.02
  topaz-dev

f:id:ts0818:20170924154200j:plain

 

今回は「2.4.2」 バージョンの「ruby」をインストール。

rbenv install 2.4.2

 

f:id:ts0818:20170924154620j:plain

はい、エラー。

Rubyスクレイピング(準備編) – skillup

CentOSにrbenvをインストールする方法 - TASK NOTES

⇧  上記サイト様によると、コンパイラがインストールされていないとのこと。

 

yum install -y git gcc gcc-c++

f:id:ts0818:20170924155145j:plain

f:id:ts0818:20170924155334j:plain

再度、「ruby」のインストール。

rbenv install 2.4.2

f:id:ts0818:20170924155958j:plain

かなり時間がかかりましたがインストールされました。

「 rbenv global 」コマンドで、環境全体での Ruby バージョンを指定できる。

rbenv を利用した Ruby 環境の構築 | Developers.IO

rbenv global 2.4.2

f:id:ts0818:20170924160203j:plain

Install Ruby 2.4 - CentOS 7.3 - The Shell GuruThe Shell Guru 

 

Ruby on Railsをインストール

「gem」関連をアップデートします。

gem update --no-document

gemのインストールで`--no-document`を付けると77倍早い - Qiita

f:id:ts0818:20170924161309j:plain

 

gem cleanup [gemname] [options]コマンドを使うと古いバージョンのGemを削除してくれます。Gem名を省略した場合は全て対象になります。

【Ruby】Gemコマンドの使い方まとめ - TASK NOTES

gem cleanup

f:id:ts0818:20170924161604j:plain

gemでインストール可能なrailsのバージョンを確認できるコマンドを作成してる人がおられたのですが、 

gem query -ra -n rails

gemでインストール可能なrailsのバージョン確認方法 - mcommit's message

f:id:ts0818:20170924164144j:plain

無茶苦茶たくさん候補が表示されてしまうので、今回は何もバージョンを指定せずインストールしました。

gem install rails --no-document

f:id:ts0818:20170924164159j:plain

バージョンの確認。

rails -v

f:id:ts0818:20170924164217j:plain

⇩  Railsのバージョン変更については下記サイト様を

3分でできるRailsダウングレード - Qiita

⇩  Railsで使用するgemのバージョン管理については下記サイト様を

複数バージョン共存可能なRails環境の構築 - Blowin' in the Wind

 

Ruby on Railsのプロジェクトを作成

ようやく、paizaの「Ruby on Rails」の入門講座ができる環境になったけど、既に「Rails入門2」 からスタートという悲しさ。

paizaのRails入門を参考にするなら、Railsのプロジェクトは、ユーザーのhomeディレクトリに作成するみたいですね。ユーザーが「vagrant」しかいないので、とりあえず、「vagrant」に切り替え。

su - vagrant
pwd

f:id:ts0818:20170924170851j:plain

プロジェクトができたか確認。 

ls

f:id:ts0818:20170924171324j:plain

Railsのプロジェクトに移動し、

cd lunchmap
rails generate controller welcome index

はい、エラー。

f:id:ts0818:20170924172614j:plain

エラーの内容を見てみると、「JavaScript runtime」が見つからないということらしい。

『There was an error while trying to load the gem 'uglifier'.Gem Load Error is: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.』

rails serverコマンドでエラー発生 – Linuxプログラミング環境インストール物語

⇧  上記サイト様によると、

  1. Node.jsをインストール
  2. Gemfileを修正

の2パターンの方法があるらしいのですが、本番環境で動かすことを考慮する場合は、「Gemfileを修正」を選択したほうが良いようです。

「gem enviroment」で「gemファイル」のインストール場所が確認できるらしいのですが、 

gem environment

gemファイルのインストール場所を調べたりする方法 - Qiita

f:id:ts0818:20170924181458j:plain

「gem install」でインストールされるファイルの場所を確認するってことらしい、紛らわしい!でも、きっと後々に生きてくるはず!

Railsでプロジェクトを作成した場合、プロジェクト直下に「Gemfile」ができてるらしい。

ls

f:id:ts0818:20170924183424j:plain

rails環境構築(CentOS + ruby on rails) - Qiita

viエディターで「Gemfile」を編集します。 

vi Gemfile

f:id:ts0818:20170924183944j:plain

「i」でINSERTモードになってから、コメントアウトされている

# gem 'therubyracer', platforms: :ruby

の部分を

gem 'therubyracer', platforms: :ruby

のように変更します。

f:id:ts0818:20170924183956j:plain

変更したら、「Esc」キーを押して「:wq」で保存します。 

そしたら、「bundle install」をすれば良いようです。

bundle installを実行すると、railsは、gemfile.lockを元にgemのインストールを行います。この時、gemfile.lockに記述されていない、且つgemfileに記述されているgemがある場合、そのgemとそのgemに関連するgemをインストール後、gemfile.lockを更新します。

bundle install と bundle updateの違いについて - Qiita

bundle install

f:id:ts0818:20170924185124j:plain

f:id:ts0818:20170924185135j:plain

 

仮想マシンにWebサーバ(Nginx)をインストール

CentOS7にnginxを導入&初期設定まとめ | vdeep  

⇧  上記サイト様を参考に導入していきます。

http://nginx.org/  にアクセスし、「nginx-1.13.5」のリンクをクリック。

f:id:ts0818:20170924192901p:plain

ダウンロードのページに来るので、

f:id:ts0818:20170924193040j:plain

Linux packages for mainline version」のリンクを選択。

f:id:ts0818:20170924193622j:plain

ここのコードをコピーし、CentOS7用に書き換えます。

f:id:ts0818:20170924193739j:plain

sshクライアント側に戻って、viエディターで「/etc/yum.repos.d/nginx.repo」ファイルを編集していきます。

vi /etc/yum.repos.d/nginx.repo

f:id:ts0818:20170924194311j:plain

「i」でINSERTモードになって、コピーしておいたコードをCentOS7用にしたものを張り付け

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=0   

f:id:ts0818:20170924195206j:plain

「Esc」キーを押し、「:wq」で保存。バージョンを確認します。

sudo yum info --enablerepo=nginx nginx

f:id:ts0818:20170924195147j:plain

Nginxのインストール。

sudo yum -y install --enablerepo=nginx nginx

f:id:ts0818:20170924195220j:plain

Nginxがインストールされたか確認。

nginx -v   

f:id:ts0818:20170924195412j:plain

 

Nginxのリバースプロキシ設定

Nginxのリバースプロキシの設定で、開発用のRailsサーバー(WEBrickというらしいです)に繋がるようにします。

研修4-2-1 -ウェブサーバの構築 Ruby 前編- | 株式会社アクシス

⇧  本番環境では、「Unicorn」というアプリケーションサーバRailsを動かすことが多いみたいです。

「/etc/nginx/conf.d/」に、新しくconfファイルを作ります。

sudo vi /etc/nginx/conf.d/rails.conf

f:id:ts0818:20170924201244j:plain

編集していきます。

upstream web-rails {
  server localhost:3000;
}
server {
  listen       80;
  server_name  http://127.0.0.1;
 
  location ~* .*\.(jpg|gif|png|css|js|html|) {
    root   /home/vagrant/lunchmap/;
    index  index.html index.htm;
  }
 
  location / {
    proxy_pass http://web-rails/;
  }
}

「Esc」キーを押し、「:wq」で保存。

Rails generate

paizaでやってた謎のコマンドはこういうことだったらしです。 

rails generate controller <コントローラー名> <アクション名> コントローラー名は複数形で、頭文字を大文字にする。 newアクションを持つUsersコントローラーを作るときは次のように入力する。

command
$ rails generate controller Users new

Rails generate の使い方とコントローラーやモデルの命名規則 - Qiita

先ほどはエラーがでましたが、再度実行。

rails generate controller welcome index

f:id:ts0818:20170924202754j:plain

今度は成功! 

WebサーバとRailsno開発用サーバを起動

サーバを起動してみます。

sudo systemctl start nginx
rails s -b 0.0.0.0

f:id:ts0818:20170924203732j:plain

ブラウザで『http://仮想マシンIPアドレス/』でアクセスします。

f:id:ts0818:20170924203931j:plain

リバースプロキシが機能してません、オーマイが!Nginxのプロキシの設定を修正します。 一旦、サーバを止めます。「Ctrl + C」でRailsの開発サーバを止め、

sudo systemctl stop nginx

f:id:ts0818:20170924204157j:plain

試行錯誤すること、「/etc/nginx/conf.d/rails.conf」の最終稿はこれだ!「server_name」には、「仮想マシンIPアドレス」を記述します。(本番環境では、DNS名とかになるのかな?)「upstream 【proxy_passに指定したドメイン名】」の「server」に、「『127.0.0.1』 + 『アプリケーションサーバRails開発用サーバ(WEBrick)のポート番号』」を指定。

ホスト名によるアクセス設定(hostsファイル) - Apache基本設定 - Apache入門

 

upstream web-rails {
  server 127.0.0.1:3000;
}
server {
  listen       80;
  server_name  192.168.33.10;

  location ~* .*\.(jpg|gif|png|css|js|html|) {
    root   /home/vagrant/lunchmap/public;
    index  index.html index.htm;
  }

  location / {
    proxy_pass http://web-rails;
  }
}

f:id:ts0818:20170924205923j:plain

再び、サーバを起動してみます。

sudo systemctl start nginx
rails s -b 0.0.0.0

ブラウザで『http://仮想マシンIPアドレス/』にアクセス。ハラショー!Rails

f:id:ts0818:20170924210103j:plain

paizaで作ったコントローラーも機能しています! 

f:id:ts0818:20170924210118j:plain

 

スタートラインに立つまでが長いよね...がんばります。ようやく、paizaの「Rails入門」に参戦できますね。