GCEで事前準備(rubyなどインストールする編)
ああああ…アプリ作るまでが長い…
まずはrbenvを使ってRubyとRailsをインストールし、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をインストール。
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
結構待たせたくせにエラーだって!なんてこと!
メモリー足りないっぽい…ふふふふ…早速きたーーーーーーーーーー
GCEのf1-microインスタンスがハングアップする話 – きゃわいどっとてっく
遙かデジタリアへ: RubyのCGIをGoogle Cloud Platformの無料枠で動かしたい ~(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アプリの作成。