Rails
vagrant
Rails5

【Vagrant/Rails】空のUbuntuからの環境構築

vagrant sshまで

vagrant init

$ vagrant init bento/ubuntu-16.04

A `Vagrantfile` has been placed in this directory.

Vagrantfileの編集

以下の様にする。

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://atlas.hashicorp.com/search.
  config.vm.box = "bento/ubuntu-16.04"

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

  config.vm.network "private_network", ip: "192.168.33.10"

  config.vm.synced_folder ".", "/vagrant"
end

vagrant up

$ vagrant up
これで起動する。
パスワードが求められた場合はsudoのパスを。

vagrant ssh

$ vagrant ssh
これでvagrantにログインできる。

様々なinstall

基本ライブラリのinstall

$ sudo apt-get update
$ sudo apt-get install -y libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev

gitのinstall

$ wget https://www.kernel.org/pub/software/scm/git/git-2.5.1.tar.gz
$ tar -zxf git-2.5.1.tar.gz
$ cd git-2.5.1
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local install
$ which git
$ git --version

rbenvのinstall

$ cd
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ sudo apt install -y ruby-dev
$ sudo apt-get install -y autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev

gitでrbenvを入れる理由

最新のrubyを入れようとした時にrbenvも最新版を持ってくる必要がある。
その際、gitで入れておいた方が、masterを持ってきやすい。

rbenvでRubyのInstall

$ sudo apt-get install -y libreadline-dev
$ echo $SHELL

これを忘れる方が多いので注意!
$ vim .bashrc
で、末尾に以下を追加する。

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"
$ source ~/.bashrc #またはexit
$ which rbenv
$ rbenv --version
$ rbenv install 2.4.1
$ rbenv versions
$ rbenv global 2.4.1
$ rbenv rehash
$ rbenv version
$ which ruby # /home/vagrant/.rbenv/shims/ruby
$ ruby -v #これで2.4.1になることを確認
# 2.4.1じゃない場合
$ source ~/.bashrc #これで確認して2.2.1になっていたらok
$ which gem # /home/vagrant/.rbenv/shims/gem
$ gem -v # 2.6.11くらい

rails newまでの下準備

下準備

$ sudo apt-get -y install libxslt-dev libxml2-dev
$ echo install: --no-rdoc --no-ri >> .gemrc
$ echo update:  --no-rdoc --no-ri >> .gemrc

mysqlのinstall

$ sudo apt-get install mysql-server

途中謎の画面になるが何も入力せずにenterを叩く

root loginができない。。。
以下で解決!!

$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
$ sudo service mysql stop
$ sudo rm -fr /var/lib/mysql
$ sudo mkdir /var/lib/mysql
$ sudo chown mysql:mysql /var/lib/mysql
$ sudo /usr/sbin/mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql

$ sudo service mysql restart
$ mysql -uroot #これでできるはず

Bundler install

$ rbenv exec gem install bundler
$ rbenv rehash

gemのinstall先のディレクトリの作成

共有ディレクトリにgemを入れると変な感じになる。

$ sudo mkdir /usr/local/src/bundles
$ sudo chown -R vagrant:vagrant /usr/local/src/bundles

bundle initからrails newまで

ディレクトリの作成

$ cd /vagrant/ # 共有ディレクトリへ
$ mkdir app_name
$ cd app_name

bundle init

$ bundle init

Gemfileを以下の様に書き換える

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

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

gem "rails", "5.1.1"

bundle install

$ bundle install --path /usr/local/src/bundles/app_name --jobs=4
$ bundle exec rails new -B -d mysql --skip-turbolinks --skip-test . # 上書きしますか?的なのが出るけど、enterでok
$ vim Gemfile

以下の様に

source 'https://rubygems.org'

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.1.1'
# Use mysql as the database for Active Record
gem 'mysql2', '>= 0.3.18', '< 0.5'
# Use Puma as the app server
gem 'puma', '~> 3.7'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 3.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Capistrano for deployment
gem 'capistrano-rails', group: :development

gem 'slim-rails'
# gem 'jquery-rails'

# gem 'omniauth'

gem 'meta-tags'
gem 'dotenv-rails'

# exceptionを通知
gem 'exception_notification', :github => 'smartinez87/exception_notification'
# Slack通知
gem 'slack-notifier'

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  # Adds support for Capybara system testing and selenium driver
  gem 'capybara', '~> 2.13'
  gem 'selenium-webdriver'
end

group :development do
  # Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

bundle installが正常に動作するまで、色々install

therubyracerのinstall

$ sudo apt-get install build-essential g++
$ gem install therubyracer -v '0.12.3' -- --with-v8-dir
$ bundle install

mysqlのinstall

bundle installでエラーする

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

    current directory: /usr/local/src/bundles/road_shopping/ruby/2.4.0/gems/mysql2-0.4.8/ext/mysql2
/home/vagrant/.rbenv/versions/2.4.1/bin/ruby -r ./siteconf20170805-7177-14fs82y.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for rb_thread_blocking_region()... no
checking for rb_wait_for_single_fd()... yes
checking for rb_hash_dup()... yes
checking for rb_intern3()... yes
checking for rb_big_cmp()... yes
checking for mysql_query() in -lmysqlclient... no

mysql client is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try again.
-----
*** 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.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/home/vagrant/.rbenv/versions/2.4.1/bin/$(RUBY_BASE_NAME)
    --with-mysql-dir
    --without-mysql-dir
    --with-mysql-include
    --without-mysql-include=${mysql-dir}/include
    --with-mysql-lib
    --without-mysql-lib=${mysql-dir}/lib
    --with-mysql-config
    --without-mysql-config
    --with-mysql-dir
    --without-mysql-dir
    --with-mysql-include
    --without-mysql-include=${mysql-dir}/include
    --with-mysql-lib
    --without-mysql-lib=${mysql-dir}/lib
    --with-mysqlclientlib
    --without-mysqlclientlib

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /usr/local/src/bundles/road_shopping/ruby/2.4.0/extensions/x86_64-linux/2.4.0-static/mysql2-0.4.8/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /usr/local/src/bundles/road_shopping/ruby/2.4.0/gems/mysql2-0.4.8 for inspection.
Results logged to /usr/local/src/bundles/road_shopping/ruby/2.4.0/extensions/x86_64-linux/2.4.0-static/mysql2-0.4.8/gem_make.out

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

In Gemfile:
  mysql2
$ sudo apt-get install libmysqlclient-dev
$ gem install mysql2 -v '0.4.8'
$ bundle install

nodejsのinstall

$ sudo apt-get install -y nodejs npm
$ sudo npm cache clean
$ sudo npm install n -g
$ sudo n stable
$ sudo ln -sf /usr/local/bin/node /usr/bin/node
$ node -v
$ sudo apt-get purge -y nodejs npm
$ sudo npm install --global yarn #yarnのinstall

rails s

vagrantで起動したrailsアプリを、クライアント側のブラウザで表示するために、
$ bundle exec rails s -b 0.0.0.0

便利な小ネタ

gitの管理はクライアント側で。

githubとのやりとりは、vagrant側でなく、Mac側でやった方がよい。
アカウントをvagrant側で設定したり、公開鍵の登録とかが面倒なので。

aliasを設定しよう

以下をvagrant側の~/.bashrcの適当なところに貼り付け!

alias b='bundle exec'
alias brs='bundle exec rails s -b 0.0.0.0'
alias brc='bundle exec rails c'