Motomichi Works Blog

モトミチワークスブログです。その日学習したことについて書いている日記みたいなものです。

railsその0001 vagrantでrails5の環境構築をする

参考にさせて頂いたページ

全体的なインストール手順について

はじめに

ポイントとしては、手順のなかにある以下のコマンドを実行するときに

bundle install --path 任意のパス

ホストと同期しているディレクトリをパスに指定するとエラーが出るらしい。ということです。

今回の環境(インストーラーなど)

ホストマシン環境

Windows10
vagrant_1.8.4.msi
VirtualBox-5.0.24-108355-Win.exe

ゲストマシン環境

vagrant upまでやってみてexitする

以前、以下の手順でvagrant upまでやって、ゲストマシンからexitしました。

vagrantその0027 Windows10にvagrant_1.9.7_x86_64.msiでインストールしなおしてvagrant sshまでやってみる - Motomichi Works Blog

ポートフォワーディング設定

localhost:3000でrailsのスタートページが閲覧できるようにvagrantの設定をしておきます。

Vagrantfileの

# config.vm.network "forwarded_port", guest: 80, host: 8080

の行を以下のようにします。

config.vm.network "forwarded_port", guest: 3000, host: 3000

vagrant環境内とホストマシンのディレクトリを同期設定とディレクトリの作成

Vagrantfileの

# config.vm.synced_folder "../data", "/vagrant_data"

の行を以下のようにします。

config.vm.synced_folder "./my_app", "/var/www/rails_project/my_app"

Vagrantfileがあるディレクトリに my_app ディレクトリを作成しておきます。

ホストマシンのこのディレクトリが、ゲストマシンの /var/www/rails_project/my_app と同期されることになります。

Vagrantfileの設定変更を反映してディレクトリを同期する

以下のコマンドでVagrantfileの編集内容を反映します。

vagrant reload

ゲストマシン内の/var/www/rails_project/my_appディレクトリはこのとき作成されて、同期されます。

yumで色々インストールする

まず仮想環境にログインします。

vagrant ssh

参考ページにならって、以下のコマンドを実行しました。

sudo yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison git vim

以下のコマンドでgitがインストールされたことが確認できました。

git --version

rbenvでrubyをインストールする

参考ページにならって、以下のコマンドを実行しました。

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

以下のように表示されて /home/vagrant/ にcloneされました。

Initialized empty Git repository in /home/vagrant/.rbenv/.git/

参考ページにならって、続けて以下のコマンドを実行しました。
パスを通したり、ruby-buildをインストールします。

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bashrc
$ exec $SHELL -l
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ cd ~/.rbenv/plugins/ruby-build
$ sudo ./install.sh
$ rbenv install -l

インストール可能なrubyのバージョンの一覧が出ます。

続いて以下のコマンドでrubyをインストールします。

$ rbenv install 2.4.1

が、2017年2月には大丈夫だったと思うのですが、2017年5月に同じ手順でやったら以下のエラーが。

Downloading ruby-2.4.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2
error: failed to download ruby-2.4.1.tar.bz2

BUILD FAILED (CentOS release 6.7 (Final) using ruby-build 20170405-4-g365dd1f)

CentOS7にRails環境を整えるまで①−2(rbenv編) - Qiita を参考にさせて頂いて、ログを確認します。

まずは以下のコマンドでログファイルのファイル名を確認します。

$ ls /tmp/

次にログファイルの内容を確認します。 ログファイル名はご自身の環境にあわせてご確認ください。

$ cat ruby-build.20170505140334.2859.log

を実行してみたら以下のように表示されました。

curl: (35) SSL connect error

ということで、CentOS6.xのlibcurlが古くてcurl: (35) SSL connect errorが発生する件 - Qiitaのページを参考にさせていただきました。

以下のコマンドを実行しました。

$ sudo rpm -Uvh http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-1-13.rhel6.noarch.rpm
$ sudo vim /etc/yum.repos.d/city-fan.org.repo

enabled=1のところを下記のように0に編集しました。

[city-fan.org]
name=city-fan.org repository for Red Hat Enterprise Linux (and clones) $releasever ($basearch)
#baseurl=http://mirror.city-fan.org/ftp/contrib/yum-repo/rhel$releasever/$basearch
mirrorlist=http://mirror.city-fan.org/ftp/contrib/yum-repo/mirrorlist-rhel$releasever
#enabled=1
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-city-fan.org

次に以下のコマンドを実行してlibcurlをアップデートしました。

sudo yum update --enablerepo=city-fan.org libcurl

ようやくrubyのビルドが実行できます。

$ rbenv install 2.4.1
$ rbenv rehash
$ rbenv global 2.4.1

以下のコマンドで正常にインストールできているか確認します。

$ ruby -v
$ which gem
$ which ruby

bundlerをインストールする

参考ページにならって、以下のコマンドを実行しました。

$ gem install bundler --no-rdoc --no-ri
$ rbenv rehash

railsのインストー

ここからは Vagrant で Ruby on Rails 4 の環境構築 - Qiita の「Rails のインストール」あたりから参考にさせて頂いて進めます。

MySQLを使用する場合はさきほどのページがよさそうです。

$ gem install rails
$ rbenv rehash
$ rails -v
$ which rails

正常にインストールできたことが確認できました。

バージョンを指定しない場合、最新バージョンがインストールされるので、5.0.1がインストールされました。

bundle installでプロジェクトにrailsをインストールする

$ cd /var/www/rails_project/my_app
$ bundle init

するとGemfileが作成されるので、参考ページにならってGemfileを編集します。

以下の行のコメントを解除します。

# gem "rails"

bundle installコマンドを実行してrailsをプロジェクトにインストールしますが、このとき指定するパスは、vagrantでホストマシンと同期しているディレクトリだとエラーになるので、ひとつ上の階層にvendorディレクトリを作成して、 ../vendor/bundle を指定しています。

$ su
vagrant(パスワード入力)
# mkdir ../vendor
# chmod 777 ../vendor
# exit
$ bundle install --path ../vendor/bundle

同期しているディレクトリを指定した場合は以下のようなエラーが出ると思います。

Text file busy @ unlink_internal - ./siteconf20170728-2850-1xca5va.rb

Gem files will remain installed in /var/www/rails_project/my_app/vendor/bundle/ruby/2.4.0/gems/nio4r-2.1.0 for inspection.
Results logged to /var/www/rails_project/my_app/vendor/bundle/ruby/2.4.0/extensions/x86_64-linux/2.4.0-static/nio4r-2.1.0/gem_make.out

An error occurred while installing nio4r (2.1.0), and Bundler cannot continue.
Make sure that `gem install nio4r -v '2.1.0'` succeeds before bundling.

In Gemfile:
  rails was resolved to 5.1.2, which depends on
    actioncable was resolved to 5.1.2, which depends on
      nio4r

「ホストマシンと同期しているディレクトリにbundle installするとエラーになる」件については解決策が以下のページに書いてありました。

RailsのプロジェクトをVMで共有した際にbundle installでこける問題 - Qiita

rails newしてアプリケーションを作成する

引き続き「Vagrant で Ruby on Rails 4 の環境構築 - Qiita」を参考にrailsプロジェクトを作成します。

bundle exec rails new .

参考ページにあるとおり、Gemfileを上書きするか確認されるのでYでenterします。

以下のようなエラーが出ました。

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /var/www/rails_project/vendor/bundle/ruby/2.4.0/gems/sqlite3-1.3.13/ext/sqlite3
/home/vagrant/.rbenv/versions/2.4.1/bin/ruby -r ./siteconf20170505-15415-4si8oi.rb extconf.rb
checking for sqlite3.h... no
sqlite3.h is missing. Try 'brew install sqlite3',
'yum install sqlite-devel' or 'apt-get install libsqlite3-dev'
and check your shared library search path (the
location where your sqlite3 shared library is located).
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

上記のメッセージにあるとおり、yumsqliteをインストールして、bundle installします。

sudo yum -y install sqlite-devel
bundle install

次にrailsサーバーを起動します。

bundle exec rails s

以下のエラーが出ました。

Gem Load Error is: Could not find a JavaScript runtime.

Gemfileの以下の行のコメントを解除します。

# gem 'therubyracer', platforms: :ruby

以下のコマンドでtherubyracerをインストールします。

bundle install

今度はrailsサーバーが起動できるはず。

bundle exec rails s

localhost:3000にブラウザでアクセスすると、railsのスタートページが表示されました。

この記事はとりあえずここまでですが、vagrantでの開発では「railsその0002 vagrant+rails5の環境でmodelやcontrollerのファイルを編集しても反映されない問題を解決する - Motomichi Works Blog」のような問題が発生したので認識しておくと良さそうな気がします。

ここまで確認できたら、ドットインストールの「http://dotinstall.com/lessons/basic_rails_v2」とかをやると良いかもしれないです。

ctrl+c でrailsサーバーを止めます。