【CentOS7】Ruby on Railsのインストールから起動まで解説【Mysql】

Ruby on Railsのインストール

この記事では、Ruby on RailsをCentOS7(Linux)にインストールして起動し、初期画面を表示するところまでの手順を体系的に紹介します。

Mysqlなどの連携や、エラーなどでハマりやすいポイントについても解説しているので、ほかの業務で活かせるところもあると思います。

「CentOSなんて持ってないよ!」という方は、以下の記事を読みながら作るところから始めてみましょう。

キツネ

実際に手を動かしながら覚えよう!

Rubyのインストール

Railsを使う前に、まずはCentOS7にRubyがインストールされているかを確認しましょう。

Rubyのバージョンを確認
$ ruby -v
ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-linux]

もし、上のようにRubyのバージョンが表示されていなければ、Rubyをインストールする必要があります。

以下の記事を読んでCentOS7にRubyをインストールしてください。

Ruby on Railsのインストール

「Ruby on Rails(Rails)」は、「gem」コマンドでインストールします。

このとき、Railsのバージョンを指定したい場合は「-v」オプションをつけて実行してください。

Railsをインストール(最新バージョン)
# 最新バージョンのRailsをインストールする場合
$ gem install rails
Railsをインストール(指定バージョン)
# 指定したバージョンのRailsをインストールする場合
$ gem install rails -v 5.1.6

「gem」がわからない方は以下の記事を読んで、さきにRailsの概要について知っておいたほうが、この先もスムーズに理解できると思います。

Railsのバージョンの確認

Railsをインストールすると、「rails」コマンドが使えるようになります。

本当に「rails」コマンドが使えるか、試しにrailsのバージョンを表示させてみましょう。

Railsのバージョンを表示
$ rails -v
Rails 5.2.3

キツネ

上のようにRailsのバージョンが表示されていればOK!

Railsアプリの作成

では、Railsアプリを作成していきましょう。

ここでは、ホームディレクトリの下に「training」ディレクトリを作成して、その中に「training_app」というアプリを作ることにします。

また、アプリを作成する際に、使用するデータベースを「Mysql」に指定します。

Mysqlがインストールされていない方は、以下の記事を読みながらインストールしておきましょう。

ディレクトリの作成

ディレクトリはどこでもいいのですが、今回はホームディレクトリの下に「training」という名前のディレクトリを作成します。

ディレクトリを作成
# ホームディレクトリに移動
$ cd
# 「training」ディレクトリを作成
$ mkdir training
# 「training」ディレクトリに移動
$ cd training

Railsアプリの作成

「rails new」コマンドで、Railsアプリを作成します。その際に、使用するデータベースもあわせて指定しましょう。

今回は「Mysql」を指定するので、オプションで「-d mysql」をつけてください。

実際の業務ではMysqlなどのDBサーバを使うことが多いので、今のうちから慣れておきましょう。

ちなみに、オプションを指定しない場合は「SQLite」というデータベースがデフォルトで使用されます。

Mysqlを指定してRailsアプリを作成
$ rails new training_app -d mysql
        :
        :
An error occurred while installing mysql2 (0.5.2), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'` succeeds before bundling.
        :
        :
Install missing gem executables with `bundle install`

コマンドを実行すると、上記のようなエラーが出るかもしれません。

どうやら、「mysql2というパッケージのインストールに失敗した」ということみたいです。

mysql2がインストールできなかった原因

「rails new」コマンドを実行すると、アプリ生成時に必要なパッケージを「RubyGems」で自動的にインストールする仕組みになっています。

さきほど、「-d mysql」オプションを指定したことにより、「gem install mysql2」コマンドが内部で実行されました。

ところが、「mysql2」というgemパッケージをインストールするには、「mysql-devel」というrpmパッケージがCentOSにインストールされていることが前提となっていたため、「mysql2」のインストールに失敗してしまったようです。

つまり、この問題を解決するには

  1. yumで「mysql-devel」をインストール
  2. gemで「mysql2」をインストール

という手順を踏む必要があります。

ちなみに「mysql-devel」は、Mysqlの機能をプログラム側から使えるようにするためのパッケージです。

キツネ

「devel」はdevelopmentの略だよ!

mysql-develのインストール

エラーの原因もわかったので、まずはCentOS7に「mysql-devel」をインストールしましょう。

mysql-develをインストール
$ sudo yum install -y mysql-devel

Gemfileの確認

1つ注意してほしいのは、さきほど「rails new」コマンドを実行したため、未完成ながらも、すでにRailsアプリが作成されているという点です。

つまり、「rails new」コマンドでRailsアプリを作る必要はないということです。

「ls -al」で、「training_app」ディレクトリの中を確認してみましょう。

training_appディレクトリの中を確認
$ ls -al ~/training/training_app/
total 40
drwxrwxr-x. 14 vagrant vagrant 4096 Apr 18 09:18 .
drwxrwxr-x.  3 vagrant vagrant   26 Apr 18 08:34 ..
drwxrwxr-x. 10 vagrant vagrant  124 Apr 18 08:34 app
drwxr-xr-x.  2 vagrant vagrant   84 Apr 18 08:34 bin
drwxrwxr-x.  5 vagrant vagrant  270 Apr 18 08:34 config
-rw-rw-r--.  1 vagrant vagrant  130 Apr 18 08:34 config.ru
drwxrwxr-x.  2 vagrant vagrant   22 Apr 18 08:34 db
-rw-rw-r--.  1 vagrant vagrant 2216 Apr 18 08:34 Gemfile
-rw-rw-r--.  1 vagrant vagrant 5365 Apr 18 09:18 Gemfile.lock
drwxrwxr-x.  7 vagrant vagrant  119 Apr 18 08:34 .git
-rw-rw-r--.  1 vagrant vagrant  620 Apr 18 08:34 .gitignore
drwxrwxr-x.  4 vagrant vagrant   33 Apr 18 08:34 lib
drwxrwxr-x.  2 vagrant vagrant   19 Apr 18 08:34 log
-rw-rw-r--.  1 vagrant vagrant   70 Apr 18 08:34 package.json
drwxrwxr-x.  2 vagrant vagrant  159 Apr 18 08:34 public
-rw-rw-r--.  1 vagrant vagrant  227 Apr 18 08:34 Rakefile
-rw-rw-r--.  1 vagrant vagrant  374 Apr 18 08:34 README.md
-rw-rw-r--.  1 vagrant vagrant    5 Apr 18 08:34 .ruby-version
drwxrwxr-x.  2 vagrant vagrant   19 Apr 18 08:34 storage
drwxrwxr-x.  9 vagrant vagrant  179 Apr 18 08:34 test
drwxrwxr-x.  4 vagrant vagrant   47 Apr 18 08:34 tmp
drwxrwxr-x.  2 vagrant vagrant   19 Apr 18 08:34 vendor

作成された「training_app」の中を見ると、「Gemfile」が生成されていることがわかると思います。

実は、Railsアプリには「rails new」をした時点で「Gemfile」が自動生成され、すでにその中に「mysql2をインストールする」という記述が書かれているのです。

「Gemfile」があるということは、「Bundler」を使えば「mysql2」をインストールできそうですね。

mysql2のインストール

では、「bundle」コマンドを実行して「mysql2」パッケージをインストールしましょう。

mysql2をインストール
# 作成したRailsアプリに移動
$ cd ~/training/training_app
# bundleでGemfileに記述されているgemをインストール
$ bundle install

これでRailsアプリを作成することができました。

Railsアプリの起動

では、さっそく作ったRailsアプリを起動してみます。

Railsアプリを起動
$ cd ~/training/training_app
$ rails s
    :
    :
Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

おそらく、上のようなエラーが表示されたと思います。

原因は、Railsの内部処理で必要なJavaScriptの実行環境が存在しないからです。

これは、以下のどちらかで解消することができます。

  • 「mini_racer」をbundleでインストール
  • 「node.js」をyumでインストール

mini_racerのインストール

今回は、bundleで「mini_racer」をインストールして解決してみます。

まずは、Gemfileに記述されている「# gem 'mini_racer', platforms: :ruby」という行をアンコメントして「gem 'mini_racer', platforms: :ruby」に書き変えます。

Gemfileを編集
$ cd ~/training/training_app
$ vi Gemfile
      :
      :
# gem 'mini_racer', platforms: :ruby(変更前)
gem 'mini_racer', platforms: :ruby(変更後)
      :
      :

ここで、再度「bundle install」を実行して、「mini_racer」をインストールします。

mini_racerをインストール
$ bundle install
      :
      :
make: g++: Command not found
      :
      :

今度は「g++コマンド(C++のコンパイラ)が見つからない」というエラーが発生しました。

gcc-c++のインストール

「mini_racer」をインストールするためには「gcc-c++(C++のコンパイラ)」が必要なようなので、yumでインストールしましょう。

gcc-c++をインストール
$ sudo yum -y install gcc-c++
      :
      :
Complete!

インストールが完了したら、再度「bundle install」を実行してみます。

mini_racerをインストール
$ bundle install

無事、「mini_racer」のインストールに成功したようです。

Railsアプリの起動(Vagrant環境)

Vagrant環境でLinuxを起動している方は、「rails s -b 0.0.0.0」でRailsアプリを起動させてください。

Railsアプリを起動(Vagrantの場合)
$ rails s -b 0.0.0.0
=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.2-p47), 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

上のような表示になっていれば成功です。

localhost(127.0.0.1)以外のIPアドレスからは、デフォルトでアクセスができないようになっているので、「-b 0.0.0.0」オプションをつけて、すべてのIPアドレスを許可しています。

Railsアプリを停止したいときは「Ctrl + c」を押してください。

Railsアプリの起動(Vagrant環境以外)

Vagrant(VirtualBox)などの仮想環境を使っていない場合は、「rails s」コマンドでアプリ起動できます。

Railsアプリを起動(Vagrant以外の場合)
$ rails s
=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.2-p47), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop

上のように表示されていれば成功です。「Ctrl + c」を押せば、Railsアプリを停止できます。

Railsアプリにアクセス

Railsの初期画面

さっそく、Railsアプリにアクセスしてみましょう。上のような画面になれば成功です。

ここからは環境によってアクセス方法が変わります。

初心者のためのLinux環境構築!VagrantとVirtualBoxの使い方を解説!」を読んで構築した方は、以下のURLからアクセスしてください。

http://192.168.33.10:3000

Vagrantなどの仮想環境を使わずにRails環境を構築した場合は、以下のURLでアクセスできるはずです。

http://localhost:3000

もし、上のような画面が表示されなかった場合は、一度Railsアプリを停止し、以下の方法を試してみてください。

サイトにアクセスできない

railsの「not access」エラー

もし、上の画像のように「このサイトにアクセスできません」と表示されている場合は、Railsの起動コマンドが間違っている可能性があります。(ブラウザによって表示される画面は多少違います)

Vagrantなどの仮想環境を使って構築した方は、必ず「rails s -b 0.0.0.0」で起動するようにしてください。

それでもアクセスできない場合は、Vagrantfileや「vagrant up」時の起動ログなどを確認し、IPアドレスが間違っていないかも確認してみてください。

キツネ

Vagrant環境からアクセスする場合は、注意しないとだね!

Mysqlのパスワード設定

Railsの「access denied」エラー

ブラウザからアクセスすると、「Access denied for user 'root'@'localhost' (using password: NO)」とエラーが表示されることがあります。

これは、RailsアプリがMysqlにrootユーザーでログインしようとした結果、「パスワードがない」とMysql側に怒られていることが原因です。

まずは、Mysqlにログインできるかを確認してみてましょう。

ログイン方法がわからない方やログインできない方は、以下の記事を参考にしてみてください。

Mysqlにログインできることを確認したら、ログインユーザーのパスワードをRailsのデータベース設定ファイル「database.yml」に記述する必要があります。

database.ymlを編集
$ vi ~/training/training_app/config/database.yml
     :
     :
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: (ここにパスワードを入力)
  socket: /var/lib/mysql/mysql.sock
     :
     :

「password:」のあとに、Mysqlのrootユーザーのパスワードを記述してファイルを更新してください。

Mysqlにパスワードなしでログインできる設定にした方は、この変更はスキップして大丈夫です。

Rails用データベースを作成

Railsの「unknown database」エラー

上のように、「Unknown database」とエラーが表示される場合があります。

これは、今回作ったRailsアプリが使用する「training_app_development」というデータベースが存在しないことが原因です。

つまり、同名のデータベースを作ってしまえば解決するってことになります。

データベースを作るだけなら、Mysqlから直接操作してもいいのですが、Railsには「rails db:create」という便利なコマンドがあるので、今回はそちらを使うことにします。

データベースを作成
$ rails db:create
Created database 'training_app_development'
Created database 'training_app_test'

これで、開発用、テスト用それぞれのデータベースが自動で作られました。

ここまでの対応が完了したら、もう一度Railsアプリを起動することで、ブラウザからアクセスできるようになります。

データベースの設定

このように、Railsアプリ側からデータベースを操作できるのは、Mysqlへの接続情報が「database.yml」に記述されているためです。

今回作ったアプリのデータベース名である「training_app_development」も、「rails new」コマンドを実行した際に、自動で「database.yml」に書き加えられていたからなんですね。

ちなみに、デフォルトのデータベースの命名ルールは「アプリ名_development」ですが、「database.yml」を編集することで接続するデータベースを変えることも可能です。

まとめ

無事、Railsアプリを起動できたのではないでしょうか。

ここまで、とても長かったように感じたかもしれませんが、これがWebエンジニアの日常なんです。

そして、ここからさきのRailsの使い方や細かい仕組みなどは、いまのところ解説する予定はありません。

なぜなら、Railsチュートリアル の完成度が非常に高いため、そちらで学習してもらえれば十分だからです。

厳しいことをいいますが、この記事の内容やRailsチュートリアルの内容が理解できるレベルでなければ、Webエンジニアとして食べていくのは厳しいです。

もし、この記事を読んで「難しい」と感じているなら、プログラミングスクールに通うことも真剣に考えてみてください。

わからないことがあるのは当たり前ですし、コツをつかむまで時間がかかることも普通のことです。

ただ、スクールに通って講師やメンターに教えてもらいながら成長するほうが、挫折もしづらく、圧倒的に早くWebエンジニアになれます。

スクールは、Webエンジニアになってお金を稼げるようになるまでの「投資」だと割り切ることも、時には重要です。

独学にしても、スクールにしても、最後はあなたの「やる気」次第。

どこまで本気で取り組むか」なんです。

テキストのコピーはできません。