前回作成していた、仮想マシンにRubyをインストールしていきたいと思います。
依存ライブラリのインストール
「依存ライブラリのインストール」を行います。
sudo su yum install readline-devel zlib-devel libffi-devel libyaml-devel openssl-devel sqlite-devel
gitのインストール
git cloneで、「rbenv」をインストールするため、「git」をインストールします。
yum install -y git
rbenvのインストール
システムワイドで管理=全ユーザで使うようにインストールするのが良いようです。
cd / git clone https://github.com/sstephenson/rbenv.git usr/local/src/rbenv
・CentOSにrbenvをインストールする方法 - TASK NOTES
・centos7でRubyをrbenvでバージョン管理する~システムワイドと特定ユーザ~ - Qiita
rbenvが使用できるようにPATH(環境変数の登録)
rbenvを使えるように、環境変数にパスを通す必要があるようです。「スーパユーザー」ではなく、「一般ユーザー」に切り替えてから実行していきます。(すみません、「スーパーユーザー」でした。)
echo 'export RBENV_ROOT="/usr/local/src/rbenv"' >> /etc/profile.d/rbenv.sh
echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/rbenv.sh
echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh
source /etc/profile.d/rbenv.sh
rbenvがインストールされたか確認
rbenv -v su - vagrant rbenv -v
「exit」で前のユーザーに戻るやり方だと「-bash: renv: command not found」が発生。明示的に「su - ユーザー名」で切り替えるとOKっぽい。
・rbenv: command not found on Linux Mint · Issue #130 · rbenv/rbenv · GitHub
⇧ 「~/.bashrc」を変更すればOK的なことを言ってますが、今回は行っていません。
ruby-buildのインストール
rbenvだけではrubyのインストールが出来ません。ruby-build を rbenv の plugins 以下にインストールすることでrbenv installコマンドが使用できるようになります。
ruby-buildのインストール。
sudo su - git clone git://github.com/sstephenson/ruby-build.git /usr/local/src/rbenv/plugins/ruby-build
ruby-buildがインストールされたか確認。
ls /usr/local/src/rbenv/plugins/ruby-build/bin/
インストール可能なrubyの一覧
「rbenv install -list」コマンドで確認可能です。
[root@10 ~]# rbenv install -list Available versions: 1.8.5-p52 ・ ・ 2.1.0-dev 2.1.0-preview1 2.1.0-preview2 2.1.0-rc1 2.1.0 ・ ・ 2.3.4 2.3.5 2.4.0-dev 2.4.0-preview1 2.4.0-preview2 2.4.0-preview3 2.4.0-rc1 2.4.0 2.4.1 2.4.2 2.5.0-dev jruby-1.5.6 ・ ・ jruby-9.2.0.0-dev maglev-1.0.0 maglev-1.1.0-dev maglev-2.0.0-dev mruby-dev mruby-1.0.0 mruby-1.1.0 mruby-1.2.0 mruby-1.3.0 ・ ・ rbx-2.71828182 rbx-3.0 ・ ・ rbx-3.82 ree-1.8.7-2011.03 ree-1.8.7-2011.12 ree-1.8.7-2012.01 ree-1.8.7-2012.02 topaz-dev
今回は「2.4.2」 バージョンの「ruby」をインストール。
rbenv install 2.4.2
はい、エラー。
・CentOSにrbenvをインストールする方法 - TASK NOTES
⇧ 上記サイト様によると、コンパイラがインストールされていないとのこと。
yum install -y git gcc gcc-c++
再度、「ruby」のインストール。
rbenv install 2.4.2
かなり時間がかかりましたがインストールされました。
「 rbenv global 」コマンドで、環境全体での Ruby バージョンを指定できる。
rbenv global 2.4.2
・Install Ruby 2.4 - CentOS 7.3 - The Shell GuruThe Shell Guru
Ruby on Railsをインストール
「gem」関連をアップデートします。
gem update --no-document
・gemのインストールで`--no-document`を付けると77倍早い - Qiita
gem cleanup [gemname] [options]コマンドを使うと古いバージョンのGemを削除してくれます。Gem名を省略した場合は全て対象になります。
gem cleanup
gemでインストール可能なrailsのバージョンを確認できるコマンドを作成してる人がおられたのですが、
gem query -ra -n rails
・gemでインストール可能なrailsのバージョン確認方法 - mcommit's message
無茶苦茶たくさん候補が表示されてしまうので、今回は何もバージョンを指定せずインストールしました。
gem install rails --no-document
バージョンの確認。
rails -v
⇩ Railsのバージョン変更については下記サイト様を
⇩ Railsで使用するgemのバージョン管理については下記サイト様を
・複数バージョン共存可能なRails環境の構築 - Blowin' in the Wind
Ruby on Railsのプロジェクトを作成
ようやく、paizaの「Ruby on Rails」の入門講座ができる環境になったけど、既に「Rails入門2」 からスタートという悲しさ。
paizaのRails入門を参考にするなら、Railsのプロジェクトは、ユーザーのhomeディレクトリに作成するみたいですね。ユーザーが「vagrant」しかいないので、とりあえず、「vagrant」に切り替え。
su - vagrant pwd
プロジェクトができたか確認。
ls
Railsのプロジェクトに移動し、
cd lunchmap rails generate controller welcome index
はい、エラー。
エラーの内容を見てみると、「JavaScript runtime」が見つからないということらしい。
『There was an error while trying to load the gem 'uglifier'.Gem Load Error is: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.』
・rails serverコマンドでエラー発生 – Linuxプログラミング環境インストール物語
⇧ 上記サイト様によると、
- Node.jsをインストール
- Gemfileを修正
の2パターンの方法があるらしいのですが、本番環境で動かすことを考慮する場合は、「Gemfileを修正」を選択したほうが良いようです。
「gem enviroment」で「gemファイル」のインストール場所が確認できるらしいのですが、
gem environment
・gemファイルのインストール場所を調べたりする方法 - Qiita
「gem install」でインストールされるファイルの場所を確認するってことらしい、紛らわしい!でも、きっと後々に生きてくるはず!
Railsでプロジェクトを作成した場合、プロジェクト直下に「Gemfile」ができてるらしい。
ls
・rails環境構築(CentOS + ruby on rails) - Qiita
viエディターで「Gemfile」を編集します。
vi Gemfile
「i」でINSERTモードになってから、コメントアウトされている
# gem 'therubyracer', platforms: :ruby
の部分を
gem 'therubyracer', platforms: :ruby
のように変更します。
変更したら、「Esc」キーを押して「:wq」で保存します。
そしたら、「bundle install」をすれば良いようです。
bundle install
を実行すると、railsは、gemfile.lockを元にgemのインストールを行います。この時、gemfile.lockに記述されていない、且つgemfileに記述されているgemがある場合、そのgemとそのgemに関連するgemをインストール後、gemfile.lockを更新します。
bundle install
仮想マシンにWebサーバ(Nginx)をインストール
・CentOS7にnginxを導入&初期設定まとめ | vdeep
⇧ 上記サイト様を参考に導入していきます。
http://nginx.org/ にアクセスし、「nginx-1.13.5」のリンクをクリック。
ダウンロードのページに来るので、
「Linux packages for mainline version」のリンクを選択。
ここのコードをコピーし、CentOS7用に書き換えます。
sshクライアント側に戻って、viエディターで「/etc/yum.repos.d/nginx.repo」ファイルを編集していきます。
vi /etc/yum.repos.d/nginx.repo
「i」でINSERTモードになって、コピーしておいたコードをCentOS7用にしたものを張り付け
[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=0
「Esc」キーを押し、「:wq」で保存。バージョンを確認します。
sudo yum info --enablerepo=nginx nginx
Nginxのインストール。
sudo yum -y install --enablerepo=nginx nginx
Nginxがインストールされたか確認。
nginx -v
Nginxのリバースプロキシ設定
Nginxのリバースプロキシの設定で、開発用のRailsサーバー(WEBrickというらしいです)に繋がるようにします。
・研修4-2-1 -ウェブサーバの構築 Ruby 前編- | 株式会社アクシス
⇧ 本番環境では、「Unicorn」というアプリケーションサーバでRailsを動かすことが多いみたいです。
「/etc/nginx/conf.d/」に、新しくconfファイルを作ります。
sudo vi /etc/nginx/conf.d/rails.conf
編集していきます。
upstream web-rails { server localhost:3000; } server { listen 80; server_name http://127.0.0.1; location ~* .*\.(jpg|gif|png|css|js|html|) { root /home/vagrant/lunchmap/; index index.html index.htm; } location / { proxy_pass http://web-rails/; } }
「Esc」キーを押し、「:wq」で保存。
Rails generate
paizaでやってた謎のコマンドはこういうことだったらしです。
rails generate controller <コントローラー名> <アクション名> コントローラー名は複数形で、頭文字を大文字にする。 newアクションを持つUsersコントローラーを作るときは次のように入力する。
先ほどはエラーがでましたが、再度実行。
rails generate controller welcome index
今度は成功!
WebサーバとRailsno開発用サーバを起動
サーバを起動してみます。
sudo systemctl start nginx rails s -b 0.0.0.0
ブラウザで『http://仮想マシンのIPアドレス/』でアクセスします。
リバースプロキシが機能してません、オーマイが!Nginxのプロキシの設定を修正します。 一旦、サーバを止めます。「Ctrl + C」でRailsの開発サーバを止め、
sudo systemctl stop nginx
試行錯誤すること、「/etc/nginx/conf.d/rails.conf」の最終稿はこれだ!「server_name」には、「仮想マシンのIPアドレス」を記述します。(本番環境では、DNS名とかになるのかな?)「upstream 【proxy_passに指定したドメイン名】」の「server」に、「『127.0.0.1』 + 『アプリケーションサーバのRails開発用サーバ(WEBrick)のポート番号』」を指定。
・ホスト名によるアクセス設定(hostsファイル) - Apache基本設定 - Apache入門
upstream web-rails { server 127.0.0.1:3000; } server { listen 80; server_name 192.168.33.10; location ~* .*\.(jpg|gif|png|css|js|html|) { root /home/vagrant/lunchmap/public; index index.html index.htm; } location / { proxy_pass http://web-rails; } }
再び、サーバを起動してみます。
sudo systemctl start nginx rails s -b 0.0.0.0
ブラウザで『http://仮想マシンのIPアドレス/』にアクセス。ハラショー!Rails!
paizaで作ったコントローラーも機能しています!
スタートラインに立つまでが長いよね...がんばります。ようやく、paizaの「Rails入門」に参戦できますね。
今回はこのへんで。