ゼロからWeb開発

ゼロからWeb開発

育休2回も経てる間に時代に取り残されちゃったWeb開発者のブログ

GCEで事前準備(rubyなどインストールする編)

ああああ…アプリ作るまでが長い…

まずはrbenvを使ってRubyRailsをインストールし、Unicornをインストールしていく。

 

Rubyインストール

1.Gitのインストール

Gitは、ファイルの変更履歴などを記録するバージョン管理ツール。

Gitを使ってrbnevをインストールしていくので、まず入っているか確認。

$ git --version
-bash: git: command not found

入ってないよと。

yumでインストールも出来るけど

$ yum info git
(略)
Name : git
Arch : x86_64
Version : 1.8.3.1
Release : 12.el7_4
Size : 22 M
Repo : installed
(略)

とGitにバージョンは古い。2013年VerのGitのようだ。

Gitの導入に必要なツールをインストールする。

$ sudo yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

最新バージョンをここで確認。

git-2.17.0.tar.gzのリンクをメモ。

これを取得し、解凍したいが、その前に、HTTP/HTTPS経由でまとめてデータを取得するwgetをインストール。

$ sudo yum install wget

wgetで上述のGitソースを取得し、解凍する。

$ cd /usr/local/src/
$ sudo wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.17.0.tar.gz
$ ls
git-2.17.0.tar.gz
$ sudo tar xzvf git-2.17.0.tar.gz
$ ls
git-2.17.0 git-2.17.0.tar.gz

git-2.17.0フォルダの中にいっぱい解凍されました。

 

これをコンパイル等の処理を自動的に行うmakeコマンドを使ってビルドしてインストール。

ちなみにインストール先は以下のリンクを参考にして変更。

$ cd
$ mkdir usr
$ sudo make prefix=$HOME/usr all
GIT_VERSION = 2.17.0
* new build flags
CC credential-store.o
/bin/sh: cc: command not found
make: *** [credential-store.o] Error 127

ツールが足りないみたい。

$ sudo yum install gcc
$ sudo make prefix=$HOME/usr all

長い…いけた!

$ sudo make prefix=$HOME/usr install
$ source /etc/profile

確認する。

$ git --version
git version 1.8.3.1

入った\(^o^)/

気になるので、wgetしたgitの圧縮ファイルは削除。

$ cd /usr/local/src/
$ ls
git-2.17.0 git-2.17.0.tar.gz
$ sudo rm -rf git-2.17.0.tar.gz
$ ls
git-2.17.0

 

2.rbenvのインストール

rbenvをインストール(clone)する。

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

環境設定で.bash_profileファイルに書き込む。

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

rbenvのバージョン確認。

$ rbenv --version
rbenv 1.1.1-30-gc8ba27f

 

3.Rubyのインストール

最新版Rubyを取得

ruby-build を インストール(clone)する。

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

Rubyの最新版リストを確認する。

$ rbenv install --list
Available versions:
1.8.5-p52
1.8.5-p113
(略)
2.4.3
2.4.4
2.5.0-dev
2.5.0-preview1
2.5.0-rc1
2.5.0
2.5.1 ←安定版っぽい
2.6.0-dev
2.6.0-preview1
(略)

 

Rubyをインストール

ruby2.5.1をインストール

$ rbenv install -v 2.5.1
Downloading ruby-2.5.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.bz2
/tmp/ruby-build.20180410110650.6828 ~
warning: bzip2 not found; consider installing `bzip2` package
tar (child): bzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
/home/sato/.rbenv/plugins/ruby-build/bin/ruby-build: line 213: pushd: ruby-2.5.1: No such file or directory
BUILD FAILEDtar: Child returned status 2
tar: Error is not recoverable: exiting now
(CentOS Linux 7 using ruby-build 20180329-2-ge08b257)
Inspect or clean up the working tree at /tmp/ruby-build.20180410110650.6828
Results logged to /tmp/ruby-build.20180410110650.6828.log
Last 10 log lines:
/tmp/ruby-build.20180410110650.6828 ~
warning: bzip2 not found; consider installing `bzip2` package
tar (child): bzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now

あら~~なんかエラー出た。とりあえず青字に着目したら

bzip2 コマンドが入ってなかったのが原因みたい。なのでインストール。

$ sudo yum install bzip2

その後再度ruby2.5.1インストール。

$ rbenv install -v 2.5.1
(略)
63% [549/871] lib/rss/slash.rb
Before reporting this, could you check that the file you're documenting
has proper syntax:
/home/sato/.rbenv/versions/2.5.1/bin/ruby -c lib/rss/slash.rb
RDoc is not a full Ruby parser and will fail when fed invalid ruby programs.
The internal error was:
(FiberError) can't alloc machine stack to fiber: Cannot allocate memory
uh-oh! RDoc had a problem:
can't alloc machine stack to fiber: Cannot allocate memory
run with --debug for full backtrace
make: *** [rdoc] Error 1
BUILD FAILED (CentOS Linux 7 using ruby-build 20180329-2-ge08b257)
Inspect or clean up the working tree at /tmp/ruby-build.20180410122652.7569
Results logged to /tmp/ruby-build.20180410122652.7569.log
Last 10 log lines:
The internal error was:
(FiberError) can't alloc machine stack to fiber: Cannot allocate memory
uh-oh! RDoc had a problem:
can't alloc machine stack to fiber: Cannot allocate memory
run with --debug for full backtrace
make: *** [rdoc] Error 1

結構待たせたくせにエラーだって!なんてこと!
モリー足りないっぽい…ふふふふ…早速きたーーーーーーーーーー

 

スワップ領域を設定

メモリ状況を確認。

$ free -m

↓結果

  total used free shared buff/cache available
Mem 588 262 248 8 77 230
Swap 0 0 0      

0.6GBのうち半分ぐらいしかメモリ使えない…

ここらへん参考にしてスワップメモリを設定する。

遙かデジタリアへ: RubyのCGIをGoogle Cloud Platformの無料枠で動かしたい ~(1)セットアップ

ちなみにスワップ領域とは

物理メモリの2倍程度をスワップ領域に当てればいいようなので1GBぐらいかな。
ddコマンドでスワップ用ファイルを作成する。(0で埋め尽くされた1GBのswap_1GBというファイル作成)

$ cd /home
$ sudo mkdir swap
$ sudo dd if=/dev/zero of=/home/swap/swap_1GB bs=1024 count=1024000

Swap領域にするファイルを指定する。

$ sudo mkswap /home/swap/swap_1GB

Swap領域を有効化する。

$ sudo swapon /home/swap/swap_1GB

マウント時に参照される設定ファイル/etc/fstabを編集して、OS起動時に作成したスワップ領域をマウントされるようにする。

$ sudo vim /etc/fstab

以下を追記

# 追加180410 OS起動時にスワップ領域を自動マウント
/home/swap/swap_1GB none swap sw 0 0

※swとは「swapon -a」の意味らしく、「-a」は有効化するときに/etc/fstab の3番目のフィールドが「swap」となっているデバイスをすべて有効にするという意味。

スワップ領域の確認

$ free -mt

↓結果

  total used free shared buff/cache available
Mem 588 263 50 8 274 211
Swap 999 0 999      
Total 1588 263 1050      

 

スワップ領域の情報表示

$ swapon -s
Filename Type Size Used Priority
/home/swap/swap_1GB file 1023996 0 -1

メモリスワップの度合いを調整

$ echo 10 | sudo tee /proc/sys/vm/swappiness
10
$ echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf
vm.swappiness = 10

ファイル権限を変更

$ sudo chown root:root /home/swap/swap_1GB
$ sudo chmod 0600 /home/swap/swap_1GB

 

Rubyをインストール(再)

再度Ruby2.5.1をインストールする。

$ rbenv install -v 2.5.1
(略)
The Ruby readline extension was not compiled.
ERROR: Ruby install aborted due to missing extensions
Try running `yum install -y readline-devel` to fetch missing dependencies.

またエラーかよ~~~~~
またツールが足りなかったようorz

$ sudo yum install -y readline-devel

再度Ruby2.5.1をインストールする。

$ rbenv install -v 2.5.1

お?いけったぽい

 

環境設定

再読み込みする。

$ rbenv rehash

インストールされているruby一覧を確認する。

$ rbenv versions
2.5.1

先ほどインストールした最新版に設定する。(Rubyのバージョンを切り替える)

$ rbenv global 2.5.1

確認。

$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

できた\(^o^)/

 

 

Railsインストール

RubyフレームワークであるRailsをインストールしていく。

 

ちなみにRailsアプリは/var/www/railsに置いていこうかなと…
/var/www/はApacheのデフォルトディレクトリだけど、インターネット関連のファイルはここに置くイメージ。
前回Nginxの設定ファイルにそう書いたし…勝手に作っていいのかな…

$ cd /var
$ sudo mkdir www
$ sudo mkdir rails

後で問題あれば適宜対応していきます\(^o^)/適当!

$ cd /var/www/rails

1.Bundlerのインストール

Railsをgemでインストールしてもいいけど、互換性を保ちながらインストールしてくれるBundlerが欲しい。

Gemのアップデート

$ gem update --system
Latest version already installed. Done.

rbenvで現在有効なrubyのgemを使って、Bundlerのインストールして再読込
※「rbenv exec」はrbenvで現在有効なrubyのgemという指定

$ rbenv exec gem install bundler
$ rbenv rehash
$ bundler -v
Bundler version 1.16.1

2.Bundlerを使ってRailsのインストール

Gemfileという雛形ファイルを作成

$ rbenv exec bundle init
(略)
Errno::EACCES: Permission denied @ rb_sysopen - Gemfile
(略)

おおう…権限不足だと…Gemfileってそもそもどこに作られるんかいなといろいろ調べても出てこない…しかし状況からこの「」を実行したカレントディレクトリに作成されるみたいだぞ。そもそもアプリディレクトリに作成していいのかなと調べたら、いいぽい。

なので、/var/www/railsの所有者を変更!
SSH接続ユーザはmujirushiとして(実際は違います)

$ ls -al
total 0
drwxr-xr-x 3 root root 22 Apr 10 16:03 .
drwxr-xr-x. 19 root root 265 Apr 10 15:59 ..
drwxr-xr-x 2 root root 6 Apr 10 16:03 rails
$ sudo chown mujirushi:mujirushi rails
$ ls -al
total 0
drwxr-xr-x 3 root root 22 Apr 10 16:03 .
drwxr-xr-x. 19 root root 265 Apr 10 15:59 ..
drwxr-xr-x 2 mujirushi mujirushi 6 Apr 10 16:03 rails

再度Gemfileという雛形ファイルを作成

$ rbenv exec bundle init
Writing new Gemfile to /var/www/rails/Gemfile

出来た~~\(^o^)/

$ vim Gemfile
# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
# gem "rails"
# 追加180411
gem "rails", "5.1.5"

赤字部分を追記。Rails5.1.5にしたのは、Ruby2.5.1の先人記事はないけどRuby2.5.0+Rails5.1.5ならあったから…Ruby2.5.0にすれば良かったかな(・_・;)

$ ls -a
. .. Gemfile
$ rbenv exec bundle install --path vendor/bundle
$ ls -a
. .. .bundle Gemfile Gemfile.lock vendor

ディレクトリやファイルが出来ました。
インストールされているライブラリの一覧表示する。

$ rbenv exec bundle list

 

今回はここまで。

次回はRailsアプリの作成。