さくらVPSでCentOS7 10.Ruby On Railsインストール


はじめに

自由にテスト出来るLinuxのサーバーがほしくて、さくらVPSで構築してみました。
順次手順をアップしていく予定です。

今回は、Ruby On Railsをインストールします。
どういった構成が正解かは判断がつきかねているのですが、今のところこんな感じです・・(^^;

目次

  1. 申し込み
  2. CentOS7インストール
  3. SSH接続
  4. Apache・PHPインストール
  5. MariaDBインストール
  6. FTP接続
  7. sftp接続
  8. phpMyAdminインストール
  9. 環境のバックアップ
  10. Ruby On Railsインストール
  11. RailsプロジェクトをGitで共同開発

10.Ruby On Railsインストール

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

Node.jsインストール

Node.jsのバージョンを管理する「n」パッケージをインストールします。
鶏と卵のような話ですが、「n」パッケージインストールにはnpmが必要で、npmにはNode.jsが必要ということで、Node.jsをインストールする為にまずnpmとNode.jsをインストールします。

npmインストール

$ sudo yum install epel-release

node.jsインストール

$ sudo yum install nodejs npm

「n」パッケージインストール

$ sudo npm install -g n

「n」パッケージを使ってNode.jsをインストール

最新版は「latest」、安定版は「stable」でインストールできます。

$ sudo n latest
$ node -v
v11.13.0
$ sudo n stable
$ node -v
v10.15.3

「n」パッケージの使い方

コマンド 内容
n インストールしているバージョンの表示やバージョンを切り替える
n ls すべてのバージョンを表示する
n --latest 最新バージョンを表示する
n --lts 安定バージョンを表示する
n latest 最新バージョンをインストールする
n stable 安定バージョンをインストールする
n [version] 指定したバージョンをインストールする
n rm [version] 指定したバージョンを削除する
n prune すべてのバージョンを削除する

その他もろもろインストール

$ sudo yum -y install gcc make openssl openssl-devel gcc-c++ mysql-devel readline-devel libxml2-devel libxslt-devel git bzip2 zlib-devel sqlite-devel
$ sudo npm install yarn -g

Rubyインストール

rbenvインストール

rbenvは、複数のRubyのバージョンを管理し、プロジェクトごとにRubyのバージョンを指定して使うことを可能としてくれるツールです。
まずこれをインストールします。

$ cd /usr/local
$ sudo git clone https://github.com/rbenv/rbenv.git
$ sudo mkdir rbenv/plugins && cd rbenv/plugins
$ sudo git clone git://github.com/sstephenson/ruby-build.git

ログイン時にrbenvを使えるようにする初期化スクリプトを記述します。

$ sudo vi /etc/profile.d/rbenv.sh

以下を追加

export RBENV_ROOT="/usr/local/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"

パーミッションの変更

$ sudo chmod -R 777 /usr/local/rbenv

設定を反映させるために、ここで一度ログアウトして再ログインします。
再ログインしたら、確認。

$ rbenv install -l
2.6.5

Rubyインストール

rbenvを使ってRubyをインストールします。
インストール可能なRubyバージョン一覧を表示します。

$ rbenv install -l

バージョン2.6.5のRubyをインストールします。

$ rbenv install 2.6.5

全体で使用するRubyのバージョンを指定

$ rbenv global 2.6.5

確認

$ ruby --version
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]

Rails環境構築

GemとBundler

GemはRubyGems(Ruby用のパッケージ管理ツール)で管理されるrubyのアプリケーションやライブラリです。
Bundlerは、gem動詞の互換性を保ちながらパッケージの種類やバージョンを管理するツールです。

gem

確認

$ which gem
/usr/local/rbenv/shims/gem

最新版にアップデート

$ gem update --system

バージョン確認

$ gem -v
3.0.6

bundlerインストール

システムのgemにはbundlreのみインストールし、bundler以外のものはプロジェクトのvendor/bundleに格納します。
ので、ここではbundlerのみインストール。

$ gem install bundler

プロジェクトのフォルダ

以前、4. Apache・PHPインストールでApacheをインストールした時に作成した、/var/www/の中にappというフォルダを作成し、その中にプロジェクトを作っていきます。

フォルダ作成

$ mkdir /var/www/app

Webコンテンツに複数のユーザが操作出来るように作成したグループに権限を与えます。

$ sudo chown root:webadmin /var/www/app/
$ sudo chmod 2775 /var/www/app/ -R

「bundle exec」の省略設定

railsコマンドをプロジェクト内のvendor/bundleに格納すると、railsコマンド呼出時に、「bundle exec rails server」のように「bundle exec」を付けて呼び出す必要があります。
このbundle execを省略できるように設定します。
この設定は、各ユーザーごとに必要です。

スクリプトをダウンロード

$ cd
$ curl -L https://github.com/gma/bundler-exec/raw/master/bundler-exec.sh > ~/.bundler-exec.sh

bundler-exec.shを編集

$ vi ~/.bundler-exec.sh

リストにrailsを追記(下の方にあります)

  ・
  ・
 (省略)
  ・
  ・
unicorn
unicorn_rails
wagon
rails
}"

define-bundler-aliases

unset -f define-bundler-aliases

反映させます。

$ source ~/.bashrc

利用可能なRailsのバージョンの確認

$ gem query -ra -n "^rails$"

現時点で最新は6.0.1でしたが、以下のプロジェクトでは5.2.4を使います。

プロジェクト作成

プロジェクト用フォルダ

bundlerを利用する為、「rails new 」する前に、フォルダを作成します。

$ mkdir /var/www/app/HelloWorld
$ cd /var/www/app/HelloWorld

ローカルのrubyのバージョンを指定。

$ rbenv local 2.6.5

確認

$ rbenv version
2.6.5 (set by /var/www/app/HelloWorld/.ruby-version)

Gemfile

Gemfileの雛形作成

$ bundle init
riting new Gemfile to /var/www/app/HelloWorld/Gemfile

Gemfileの編集

$ vi Gemfile

railsのバージョン5.2.4を使用できるように下記のように修正します。

# frozen_string_literal: true

source "https://rubygems.org"

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

# コメントを外し、バージョンを記述
gem "rails", "5.2.4"

gemのインストール

$ bundle install --path vendor/bundle

インストールのメッセージが流れ、無事に終わるかと思ったのですが、こんなメッセージが・・・

HEADS UP! i18n 1.1 changed fallbacks to exclude default locale.
But that may break your application.

Please check your Rails app for 'config.i18n.fallbacks = true'.
If you're using I18n (>= 1.1.0) and Rails (< 5.2.2), this should be
'config.i18n.fallbacks = [I18n.default_locale]'.
If not, fallbacks will be broken in your app by I18n 1.1.x.

For more info see:
https://github.com/svenfuchs/i18n/releases/tag/v1.1.0

「i18nの設定方法が変わったので気を付けなさい」ということみたいです。
だだ、今回はRailsのバージョン5.2.4にしていますので、I18n (>= 1.1.0) and Rails (< 5.2.2)の条件には引っ掛からないので大丈夫だと思います。

新規プロジェクト作成

これでやっとrailsコマンドが使えるようになりましたので、プロジェクトを作成します。
フォルダは作成済みですので、プロジェクト名の指定は不要です。

$ rails new .

.ruby-versionを上書きしますか?と聞いてきますのでYを入力。

Overwrite /var/www/app/HelloWorld/.ruby-version? (enter "h" for help) [Ynaqdhm]Y

Gemfileを上書しますか?と聞いてきますのでYを入力。

Overwrite /var/www/app/HelloWorld/Gemfile? (enter "h" for help) [Ynaqdhm]Y

順調に行くと思いきや、以下のメッセージが出ました。

The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Bundler could not find compatible versions for gem "sprockets":
  In snapshot (Gemfile.lock):
    sprockets (= 4.0.0)

  In Gemfile:
    sass-rails (~> 5.0) was resolved to 5.1.0, which depends on
      sprockets (>= 2.8, < 4.0)

    rails (~> 5.2.4) was resolved to 5.2.4, which depends on
      sprockets-rails (>= 2.0.0) was resolved to 3.2.1, which depends on
        sprockets (>= 3.0.0)

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
         run  bundle exec spring binstub --all
bundler: command not found: spring
Install missing gem executables with `bundle install`

依存関係に問題があるから、「bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java」を実行しろということのようです。
あと、「bundle update」を実行すると、スナップショットを最初から再構築します、と。
なので、やってみます。

$ bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java
Fetching gem metadata from https://rubygems.org/............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies......
Bundler could not find compatible versions for gem "sprockets":
  In snapshot (Gemfile.lock):
    sprockets (= 4.0.0)

  In Gemfile:
    sass-rails (~> 5.0) was resolved to 5.1.0, which depends on
      sprockets (>= 2.8, < 4.0)

    rails (~> 5.2.4) was resolved to 5.2.4, which depends on
      sprockets-rails (>= 2.0.0) was resolved to 3.2.1, which depends on
        sprockets (>= 3.0.0)

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
$ bundle update
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
 ・
 ・
(以下略)
 ・
 ・

と、同じようなメッセージが・・・
とりあえず、再度「bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java」して、「bundle update」すると、「Bundle updated!」と出たので、とりあえずOKかなと。

サーバー起動

3000のポートを開ける

ファイアウォールを使っている場合

ポートを開ける

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

さくらVPSのパケットフィルタを使っている場合

  1. さくらVPSコントロールパネルにログインし、サーバーを選択
  2. [パケットフィルタ]-[パケットフィルタ設定へ>]を選択
  3. [+任意の解放ポート設定を追加する]ボタンをクリック
  4. [TCP][3000]を設定
  5. [設定]ボタンをクリック


以上でポートが開きます。

サーバー起動

$ rails server -b 0.0.0.0
=> Booting Puma
=> Rails 5.2.4 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.5-p114), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

無事起動しました。

ブラウザで確認

次回

前回:Ruby On Railsインストール
次回:RailsプロジェクトをGitで共同開発