Help us understand the problem. What is going on with this article?

[Ruby入門 Rails5編] 01. CentOS7.3にRails5環境を構築して学習を開始する

More than 3 years have passed since last update.

ようやくRails編に突入!・`ω´・)9
ここからは、書籍(最近出た山田祥寛さんの本)や、有名なチュートリアルサイト なども参考にしつつ進める。
第1回は、CentOSでのRuby環境構築、Rails5の導入、はじめてのRailsアプリケーションを動かすまでを試してみる。

■ 今回の参考URL


http://www.wings.msn.to/index.php/-/B-08/rbenv/

http://www.wings.msn.to/index.php/-/B-08/lin_rails/

http://qiita.com/kaikusakari/items/ab518cfe9cf9ed037725

https://railstutorial.jp/chapters/beginning?version=5.0#sec-bundler

https://techracho.bpsinc.jp/hachi8833/2016_12_13/30751

 

■ 環境構築手順


【0】前提(OSの準備)

CentOS7.3 の環境を用意しておく。

今回は、Mac上に Docker で CentOS7.3 を用意した。
導入手順は、Mac に Docker で CentOS7.3 をインストール を参照。

上記の記事の Dockerfile を見てもらうと分かるが、開発まわりで必要となることが多いライブラリ群と、ツールをいくつか、併せてインストールしている。
足りないライブラリが出てきたら、随時追加インストールする想定。

★★★ 重要 ★★★
後述の手順で、Rubyの組み込みWEBサーバーである Puma を利用する。
Puma はデフォルトで3000番ポートで接続を受け付けるため、MacのブラウザからDockerのCentOSの3000番ポートへアクセスできるようにしておきたい。
そのため、上記のDocker構築手順の「docker run 〜」でコンテナを起動するときに、「-p 3000:3000」を付加して、3000番ポートをポートフォワーディングしておく。

# 実行例
docker run --privileged -it -d --name cent7test -p 3000:3000 -v /Users/miro/docker/cent72/share:/docker-host/share miro/centos7:1.0 /sbin/init

# -v はホスト側(ここではMac側)のフォルダをマウントするオプション。構築したRailsプロジェクトをMacから編集できるようにしたいのでマウントしている。
# パスや名称は適宜読み替えてください

 

【1】ruby ユーザを作成

今回用意した Docker の CentOS 環境には root しかユーザがいなかったので、ruby という一般ユーザを作って作業する。

# useradd -g wheel -d /usr/local/ruby ruby
# passwd ruby   ← rubyユーザにパスワードを設定しておく。あとでsudoするときに必要。
# su - ruby
$

★★★ 以下、基本的に rubyユーザで作業する。★★★
※一部、curl による Node.js のインストールだけはsudoでエラーになったので、rootで実行した。

 

【2】rbenv と ruby-build をインストール

バージョンを指定して Ruby をインストールするために「rbenv」を利用する。
また、Rubyの取得先を管理するための rbenvプラグインである「ruby-build」もインストールする。

① rbenv のインストール

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

 
② rbenvのコマンドにパスを通す

「~/.bash_profile」に記述を追加する。

vi ~/.bash_profile

export PATH="$HOME/.rbenv/bin:$PATH"
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi

source ~/.bash_profile
で即時反映。

 
③ ruby-build をインストール

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

※今後、新しいRubyをインストールしたいときは、さきに、以下でruby-buildを更新してから実施する。

cd ~/.rbenv/plugins/ruby-build
git pull

 

【3】Ruby のインストール

① ruby-buildを更新
新しいRubyをインストールする際は、さきに以下でruby-buildを更新しておく。
今回は、さっきインストールしたばっかりなので最新になっているはず。

$ cd ~/.rbenv/plugins/ruby-build
$ git pull
Already up-to-date.

 
② インストールできるバージョンを確認する

$ rbenv install -l

〜 中略 〜
  2.4.0-rc1
  2.4.0
  2.4.1
  2.5.0-dev
〜 中略 〜

↑たくさん表示される。「-dev」とか「-preview」とか「-rc」とか付いてないのが安定版。
現時点では、2.4.1 が最新の安定版となっている。

 
③ インストールする
今回は、現時点での最新の安定版である 2.4.1 をインストールする。

$ rbenv install 2.4.1
Downloading ruby-2.4.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2
Installing ruby-2.4.1...
Installed ruby-2.4.1 to /usr/local/ruby/.rbenv/versions/2.4.1

# ↑ インストールできたっぽい?

$ rbenv versions
  2.4.1

# ↑ うん、インストールできてる

$ ruby --version
rbenv: ruby: command not found

The `ruby' command exists in these Ruby versions:
  2.4.1

# ↑ あっれー? rubyコマンドが無いって? 「2.4.1にあるよ」的な...

$ rbenv global
system

# ↑ 2.4.1を向いてないからかな?systemってなってる。

$ rbenv global 2.4.1

# ↑ 2.4.1 に切り替えてみる。バージョンの切り替えは「rbenv global バージョン」

$ ruby --version
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

# ↑ でっきたー! ( ノ゚∀゚)ノ

 

【補足】特定プロジェクトのみ別のバージョンを指定する方法

そのディレクトリで rbenv local <バージョン> を実行する。

ディレクトリに .ruby-version という名前のファイルが作成され、バージョン指定が有効になる
(ファイルにはバージョン番号のみが記述されている)

echo x.x.x > .ruby-version で、手動でファイルを作成しても同じ。

.ruby-versionファイルで指定されたバージョンは、そのディレクトリのサブディレクトリでも有効になる。

 

【補足】rbenv利用時の、Gemインストール先について

以下にインストールされる。
~/.rbenv/versions/<バージョン>/lib/ruby/gems

※Railsのproduction環境では、--deployment オプションをつけることで、プロジェクトフォルダの vendor/bundle 以下に gem がインストールされる。
( bundler でインストールする場合は 「 --path vendor/bundle 」 というオプションを指定する)

 

【4】bundler のインストール

Rails は Gem として配布されている。
そして Gem の管理は、bundler という管理ツールが便利なので、まず bundler をインストールして、しかる後に bundler で Rails をインストールする。

なお、bundler 自身もGemとして配布されているので、これは普通に gem install コマンドでインストールする。

$ gem install bundler
Fetching: bundler-1.14.6.gem (100%)
Successfully installed bundler-1.14.6
Parsing documentation for bundler-1.14.6
Installing ri documentation for bundler-1.14.6
Done installing documentation for bundler after 5 seconds
1 gem installed

# ↑ インストールできたっぽい


$ gem list bundler

*** LOCAL GEMS ***

bundler (1.14.6)

# ↑ うん、はいってる!

 

【5】Rails のインストール

上記までで、bundler での Rails インストール準備ができたので、いよいよ Rails をインストールしてみる

 
① アプリケーション用のディレクトリを用意する
Railsのインストール先となるアプリケーションのディレクトリを用意する。

今回はDockerのコンテナを起動するときに、以下のオプションでMacのディレクトリをマウントしているので、

「 -v /Users/miro/docker/cent72/share:/docker-host/share 」
( -v Mac側のディレクトリ:CentOS側のディレクトリ )

アプリケーションをそこに構築することで、Mac上から編集できるようにする。

# ホスト側(Mac側)と共有されているディレクトリに、アプリケーション用のディレクトリを作成
$ mkdir -p /docker-host/share/webapps/myrailsapp

 
② Gemfile の生成
アプリケーションのディレクトリに Gemfile を作成し、「 gem "rails" 」を追記してインストールの準備をする

$ cd /docker-host/share/webapps/myrailsapp
$ bundler init
Writing new Gemfile to /docker-host/share/webapps/myrailsapp/Gemfile

Gemfile が生成されたので確認

vi Gemfile

# frozen_string_literal: true
source "https://rubygems.org"

# gem "rails"

↑ rails が既に記述されているので、
↓コメントを外して有効にする

# gem "rails"
↓
gem "rails"

 

【補足】Gemfile で gem のバージョンを指定する方法
# 最新版をインストール
gem "rails"

# バージョン決め打ち
gem "rails", "5.1.0"

# あるバージョン`以上`の最新版をインストール
gem 'uglifier', '>= 1.3.0'

# 指定のバージョンのマイナーバージョンアップまでならインストールされる 
# (以下の例だと、4.0.9 =>OK  4.1.0=>NG)
gem 'coffee-rails', '~> 4.0.0'

 
③ Rails のインストールを実行

bundle install を実行すると、Gemfile に記述したGem(ここではRails)がインストールされる。

ここでは、「 --path vendor/bundle 」というオプションを付けることで、このフォルダ内にインストールしている。
このオプションを付けなければ、さきほど解説したとおり、グローバルなパスである
「 ~/.rbenv/versions/<バージョン>/lib/ruby/gems 」
にインストールされる。

$ bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/..........
Fetching version metadata from https://rubygems.org/..
Fetching dependency metadata from https://rubygems.org/.
Resolving dependencies...
Installing rake 12.0.0
Installing concurrent-ruby 1.0.5
Installing i18n 0.8.1
Installing minitest 5.10.2
Installing thread_safe 0.3.6
Installing builder 3.2.3
Installing erubi 1.6.0
Installing mini_portile2 2.1.0
Installing rack 2.0.2
Installing nio4r 2.0.0 with native extensions
Installing websocket-extensions 0.1.2
Installing mime-types-data 3.2016.0521
Installing arel 8.0.0
Using bundler 1.14.6
Installing method_source 0.8.2
Installing thor 0.19.4
Installing tzinfo 1.2.3
Installing nokogiri 1.7.2 with native extensions
Installing rack-test 0.6.3
Installing sprockets 3.7.1
Installing websocket-driver 0.6.5 with native extensions
Installing mime-types 3.1
Installing activesupport 5.1.0
Installing loofah 2.0.3
Installing mail 2.6.5
Installing rails-dom-testing 2.0.3
Installing globalid 0.4.0
Installing activemodel 5.1.0
Installing rails-html-sanitizer 1.0.3
Installing activejob 5.1.0
Installing activerecord 5.1.0
Installing actionview 5.1.0
Installing actionpack 5.1.0
Installing actioncable 5.1.0
Installing actionmailer 5.1.0
Installing railties 5.1.0
Installing sprockets-rails 3.2.0
Installing rails 5.1.0
Bundle complete! 1 Gemfile dependency, 38 gems now installed.
Bundled gems are installed into ./vendor/bundle.

# ↑ インストールされた!

※「SQLite3」や「Node.js」が必要、という記述をみかけるが、今回は特に怒られずにインストールできた。
  ...と思ったけど、あとで怒られる(↓後述)

 

【補足】Rails の依存ライブラリをインストールする「SQLite3」

前述の、bundlerによるRailsのインストールは問題なく完了したが、後述の手順のRailsアプリケーションの作成のところでエラーが出た。

エラーメッセージには、
「Make sure that gem install sqlite3 -v '1.3.13' succeeds before bundling.」
とあったので、あちこちの手順で書かれている「SQLite3」というGemが、やっぱり必要らしい。
(RailsのデフォルトのDBがSQLiteになっているため)

なので、ここでインストールしておく

ちなみに「SQLite3」には sqlite-devel という開発ライブラリが必要なので、さきにインストールする

 
① sqlite-devel をインストール

sudo yum install -y sqlite-devel

 
② Gemfileに sqlite3 を記述

vi Gemfile

gem "sqlite3"

 
③ んで、インストール

bundle install --path vendor/bundle

 

【補足】Rails の依存ライブラリをインストールする「Node.js」

前述の、bundlerによるRailsのインストールは問題なく完了したが、後述の手順のPuma(Rails組み込みのWEBサーバ)の起動でエラーになった。
エラーメッセージには、
「Could not find a JavaScript runtime.」
とあったので、Node.js がやっぱり必要らしい。なので、ここでインストールしておく。

以下、rootユーザで実行

# curl -sL https://rpm.nodesource.com/setup_6.x | bash -
# yum install -y nodejs

■ Rails アプリケーションの作成と動作確認


【1】Rails アプリケーションの作成

Rails アプリケーションを作成するコマンドは以下。

bundle exec rails new .

「.」を指定することで、カレントディレクトリ名がそのままプロジェクト名になるらしい。
詳しくは次回以降に解説する予定。今回はとりあえず試してみる。

※途中で、Gemfile を上書きしてよいか聞かれるので「Y」で。

$ cd /docker-host/share/webapps/myrailsapp

$ bundle exec rails new .
〜 中略 〜
Using rails 5.1.0
Installing sass-rails 5.0.6
Bundle complete! 16 Gemfile dependencies, 70 gems now installed.
Bundled gems are installed into ./vendor/bundle.
         run  bundle exec spring binstub --all
* bin/rake: spring inserted
* bin/rails: spring inserted

# ↑ できたっぽい?

 

【2】動作確認

① Puma の起動

Rails の組み込みWEBサーバである Puma を起動する。デフォルトでポート3000で接続を受け付ける。

$ bundle exec rails s
=> Booting Puma
=> Rails 5.1.0 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.8.2 (ruby 2.4.1-p111), codename: Sassy Salamander
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

 
② とりあえず curl でアクセス確認する

Pumaの起動でターミナルが待ち状態になったので、もうひとつターミナルを起動してCentOSに接続し、curlでRailsアプリケーションにアクセスしてみる

$ curl http://localhost:3000
<!DOCTYPE html>
<html>
<head>
  <title>Ruby on Rails</title>
〜 中略 〜
      <h1>Yay! You&rsquo;re on Rails!</h1>
〜 中略 〜
</body>
</html>

# ↑ ページを取得できている

# ↓ Puma を起動しているターミナルには、以下のようにアクセスログが出力された

Started GET "/" for 172.17.0.1 at 2017-05-12 23:34:02 +0900
Cannot render console from 172.17.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by Rails::WelcomeController#index as HTML
  Rendering vendor/bundle/ruby/2.4.0/gems/railties-5.1.0/lib/rails/templates/rails/welcome/index.html.erb
  Rendered vendor/bundle/ruby/2.4.0/gems/railties-5.1.0/lib/rails/templates/rails/welcome/index.html.erb (7.3ms)
Completed 200 OK in 61ms (Views: 35.2ms)

 
③ Macのブラウザからアクセスする
最初のDockerによるCentOS環境構築の際に、3000番ポートをフォワードするように設定しておいたので、MacからDockerゲストのCentOSの3000番ポートへアクセスできる。

http://localhost:3000/
sc.png

 
できた!今日はここまで!!

prgseek
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした