Ruby
Rails
Zsh
vagrant
Prezto

ゼロからmacにVagrantとVirtualBoxを使ってCentOSを入れてから、Ruby on Railsの環境構築を整えるまでの手順

はじめに

基本的に参考サイトに書いている内容を真似してもらえれば、大丈夫です。つまずきそうな部分や、上手くいかない部分を補足的に書いています。

1. centOSをmacに入れる

http://qiita.com/okmn/items/461e5cd3ff234d4b73ff
を参考にして入れてください。

*使わなくなった仮想環境を削除する方法は
http://qiita.com/mochizukikotaro/items/52f4434c3f69c4ba1f54
を参考してください。

2.zshとpreztoを入れる

zshは、補完機能など、bashよりも使いやすいので、入れると便利です。また、preztoはzshをカラフルにデコレーションしてくれるフレームワークで、コマンドが見やすくなります。なので、別にいいって方は、飛ばしても大丈夫ですww

2.1 zshのインストール

zshのインストールをします。yumを使うと、腐ったものが入って、preztoが使えないので、ソースから取ってくる必要があります。

$ wget http://sourceforge.net/projects/zsh/files/zsh/5.0.6/zsh-5.0.6.tar.gz

解凍する

$ tar zxvf zsh-5.0.6.tar.gz
$ ls
zsh-5.0.6  zsh-5.0.6.tar.gz

コンパイルしてインストール(おまじない感)

$ cd zsh-5.0.6
$ ./configure --enable-multibyte
$ make
$ sudo make install

無事インストールできたことを確認する。

$ zsh --version
zsh 5.0.6 (x86_64-unknown-linux-gnu)
./configure時にエラーが出た場合
①gccを入れるパターン
configure: error: no acceptable C compiler found in $PATH

というエラーが出た場合

C言語のコンパイラを入れろということなので

$ sudo yum install gcc

をする。

②ncurses-develを入れるパターン
configure: error: "No terminal handling library was found on your system.
This is probably a library called 'curses' or 'ncurses'.  You may
need to install a package called 'curses-devel' or 'ncurses-devel' on your
system."

というエラーが出た場合

ncurses-develを入れれば解決できる

$ sudo yum install ncurses-devel

これで、解決!

起動時にインストールしたzshが起動するようにする

zshを使えるようにはなりましたが、毎回毎回zshコマンドを打つのは面倒くさいので、起動時にzshを起動させるために、zshをログインシェルに設定します。
ここで、ログインシェルに設定するには、chsh -s コマンドで、zshのパスを設定してあげれば良いのですが、そのパスが、/etc/shellsというファイルの中に記述されていないと、エラーとなってしまうらしいので記述していきます。実際に見てみるとわかりやすいです。

$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

インストールしたzshのパスは当然ない。

zshのパスを確認する

$ which zsh
/usr/local/bin/zsh

よって、write権限を持っているsudoで、vimを開き書き換える

$ sudo vi /etc/shells #書き換える
$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
/usr/local/bin/zsh #追加した

ここで、ログインシェルを/usr/local/bin/zshに設定する

chsh -s /usr/local/bin/zsh

*注意
パスワードを要求されますが、パスワードとユーザー名は初期ではvagrantです。

2.2 preztoを入れる

まずはgitを追加する(railsをインストールするときにも、gitのインストールをしていますが、ここでしているので、railsの時はとばしてください。)

$ sudo yum install git

zshを起動

$ zsh

公式に載ってるコマンドを実行していく

$ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"

#初期設定のファイルを追加する(これもおまじない感)
$ setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done

反映させる(再起動してもいい)

$ source ~/.zshrc

参考
http://yuk.hatenablog.com/entry/2014/09/09/014115

3. ruby on railsを入れる

https://tsuchikazu.net/linux_ruby_on_rails_install/
を参考に入れてください。

詰まったところ

①rbenv installでエラーがでた。

$ rbenv install 2.4.0
Downloading ruby-2.4.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.bz2
error: failed to download ruby-2.4.0.tar.bz2

BUILD FAILED (CentOS Linux 7 using ruby-build 20170523-7-g2de7a29)

http://qiita.com/kanuu/items/7efcbec499222802be3b
を参考にして

$ RUBY_BUILD_CURL_OPTS=--tlsv1.2 rbenv install 2.4.0

を打つと、インストールできた。

②echoコマンドがよくわからなかった。

https://eng-entrance.com/linux-command-echo
がとてもわかりやすくて、スッキリ。

③rails newでエラーが出てきた

$rails new railbookと打つと

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

In Gemfile:
  sqlite3
         run  bundle exec spring binstub --all
bundler: command not found: spring
Install missing gem executables with `bundle install`

と、エラーが出てきた。
http://qiita.com/NaokiIshimura/items/dfabac823cbad04d5ace
を参考にすると
sqlite-develを入れるらしい。

# インストール
$ sudo yum -y install sqlite-devel
$ bundle install

...
Bundle complete! 16 Gemfile dependencies, 71 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

$ rails g controller hello
      create  app/controllers/hello_controller.rb
      invoke  erb
      create    app/views/hello
      invoke  test_unit
      create    test/controllers/hello_controller_test.rb
      invoke  helper
      create    app/helpers/hello_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/hello.coffee
      invoke    scss
      create      app/assets/stylesheets/hello.scss

となり、解決できました。

④rails g contoller でいっぱいエラーが出た

$ rails generate controller hello
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:85:in `rescue in block (2 levels) in require': There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError)
Gem Load Error is: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.
Backtrace for gem load error is:
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/execjs-2.7.0/lib/execjs/runtimes.rb:58:in `autodetect'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/execjs-2.7.0/lib/execjs.rb:5:in `<module:ExecJS>'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/execjs-2.7.0/lib/execjs.rb:4:in `<top (required)>'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/uglifier-3.2.0/lib/uglifier.rb:5:in `require'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/uglifier-3.2.0/lib/uglifier.rb:5:in `<top (required)>'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:82:in `require'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:82:in `block (2 levels) in require'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:77:in `each'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:77:in `block in require'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:66:in `each'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:66:in `require'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler.rb:108:in `require'
/home/vagrant/railbook/config/application.rb:7:in `<top (required)>'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command/actions.rb:15:in `require'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command/actions.rb:15:in `require_application_and_environment!'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/commands/generate/generate_command.rb:19:in `perform'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/command.rb:27:in `run'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command/base.rb:63:in `perform'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command.rb:44:in `invoke'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/commands.rb:16:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Bundler Error Backtrace:
    from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:81:in `block (2 levels) in require'
    from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:77:in `each'
    from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:77:in `block in require'
    from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:66:in `each'
    from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:66:in `require'
    from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler.rb:108:in `require'
    from /home/vagrant/railbook/config/application.rb:7:in `<top (required)>'
    from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command/actions.rb:15:in `require'
    from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command/actions.rb:15:in `require_application_and_environment!'
    from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/commands/generate/generate_command.rb:19:in `perform'
    from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/comman# Use CoffeeScript for .coffee assets and views
d.rb:27:in `run'
    from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command'
    from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch'
    from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command/base.rb:63:in `perform'
    from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command.rb:44:in `invoke'
    from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/commands.rb:16:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

http://krs1.hatenablog.com/entry/2016/05/30/120000
を参考にするとGemfileの中にtherubyracerを入れる必要があるらしい

gem 'therubyracer'

bundle installする

$ bundle install



Bundle complete! 17 Gemfile dependencies, 74 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

$ rails g controller hello
create  app/controllers/hello_controller.rb
      invoke  erb
      create    app/views/hello
      invoke  test_unit
      create    test/controllers/hello_controller_test.rb
      invoke  helper
      create    app/helpers/hello_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/hello.coffee
      invoke    scss
      create      app/assets/stylesheets/hello.scss

となり、解決できました。

⑤localhost:3000/にアクセスできなかった

rails sでサーバーを立ててもブラウザで、
localhost:3000/
にアクセスすると何も表示されない。

http://mokokko.hatenablog.com/entry/2014/05/04/221452
を参考にすると、ネットワーク設定をするらしい。

一度、centOSから出る

$ exit

Vagrantfileを編集する

Vagrantfile
#次の1行を追加する
config.vm.network "forwarded_port", guest: 3000, host: 3000

Vagrantを再起動する

$ vagrant reload

これで、もう一度$rails s をして、ブラウザで、localhost:3000/
にアクセスすれば、表示できた!

おわりに

色々、つまずいた...