Edited at

Rails開発のための仮想環境をvagrantでつくる

More than 3 years have passed since last update.


追記

Dockerでの構築方法を以下にまとめました。参考にしてみてください。

Docker で Rails5 の開発環境を「rails new」から構築する


はじめに

Railsの開発を進めたいが、手元のパソコンの環境は不用意に壊したくないという時、仮想環境で開発を行うと思います。

そのために、すぐに開発に使えるVagrantfileを作成しました。

こちらのgithubリポジトリで公開しています。

https://github.com/kawasin73/vagrant-centos-rails


インストールされるもの


  • CentOS 6.7

  • rbenv

  • ruby 2.2.2

  • sqlite

  • MySQL

  • Nokogiriに必要なライブラリ

  • ImageMagickに必要なライブラリ

  • Git

  • その他、必要そうなライブラリ


必要となる環境

開発環境は、VirtualBox と Vagrant を用いて構築します。

Mac OSX では、VirtualBox と Vagrant を Homebrewでインストールできます。

brew cask install virtualbox

brew cask install vagrant
vagrant plugin install vagrant-vbguest

Windows でインストールするときは、公式サイトからダウンロードしてください。

vagrant-vbguest は、Guest Additionを最新に更新してくれるpluginです。

このプラグインがない場合、2回目以降のvagrant upで、mount に失敗することがあります。

また、vagrant-vbguest をインストールした場合でも、vagrant upに失敗してしまうことがあるようです。その場合は、以下の記事を参考にしてください。


利用方法

git clone https://github.com/kawasin73/vagrant-centos-rails

cd vagrant-centos-rails
vagrant up
vagrant ssh

vagrant up を実行すると、CentOSのboxのダウンロードが始まりCentOSが立ち上がります。そして、初回起動時はprovisionが行われ、上に挙げたライブラリがインストールされます。

provisionerはShellなので、Vagrant と VirtualBox 以外に必要となる依存はありません。

また、ゲストOS上の~/dataにホストOSのカレントディレクトリをマウントしているので、ホストOSのIDEを使っての開発もできます。

vagrant ssh に成功したら、

cd data

gem install rails
rails new . --database=mysql --skip-turbolinks
rake db:create
bundle install

とするとRailsの開発を進められます。

詳しくは、@masuidriveさんの @masuidrive のRailsプロジェクトの始め方を参考にすると良いと思います。


Vagrantfile


Vagrantfile

# -*- mode: ruby -*-

# vi: set ft=ruby :

Vagrant.configure(2) do |config|

GUEST_RUBY_VERSION = '2.2.2'

config.vm.box = "bento/centos-6.7"

config.vm.hostname = "centos-6-for-rails"

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

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

config.vm.synced_folder ".", "/home/vagrant/data"

config.vm.provider "virtualbox" do |vb|
# Display the VirtualBox GUI when booting the machine
vb.gui = false

# Customize the amount of memory on the VM:
vb.memory = ENV["VM_MEMORY"] || "1024"
end

config.vm.provision "shell", privileged: true, inline: <<-SHELL
function install {
echo installing $1
shift
yum -y install "$@" >/dev/null 2>&1
}
yum -y update >/dev/null 2>&1
install "development tools" gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel
install "Git" git
install "sqlite" sqlite sqlite-devel
# mysql 5.6
yum install -y http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm >/dev/null 2>&1
install "MySQL" mysql mysql-server mysql-devel
chkconfig --add mysqld
chkconfig --level 345 mysqld on
echo "Start and Initialize MySQL"
service mysqld start >/dev/null 2>&1
mysql -uroot <<SQL
-- SET ROOT PASSWORD --
UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';
-- REMOVE ANONYMOUS USERS --
DELETE FROM mysql.user WHERE User='';
-- REMOVE REMOTE ROOT --
DELETE FROM mysql.user
WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
-- REMOVE TEST DATABASE --
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test
\\_%';
-- RELOAD PRIVILEGE TABLES --
FLUSH PRIVILEGES;
CREATE USER 'rails'@'localhost';
SET PASSWORD FOR 'rails'@'localhost' = PASSWORD('password');
CREATE DATABASE development_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE test_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON development_db.* to 'rails'@'localhost';
GRANT ALL PRIVILEGES ON test_db.* to 'rails'@'localhost';
SQL
install "Nokogiri dependencies" libxml2 libxslt libxml2-devel libxslt-devel
install "ImageMagick" ImageMagick ImageMagick-devel
cp /etc/localtime /etc/localtime.org
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
echo "ZONE=
\"Asia/Tokyo\"" > /etc/sysconfig/clock
service crond restart
SHELL

config.vm.provision "shell", privileged: false, inline: <<-SHELL
echo installing rbenv
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
echo 'gem: --no-ri --no-rdoc' >> ~/.gemrc
echo installing ruby
#{GUEST_RUBY_VERSION}
rbenv install
#{GUEST_RUBY_VERSION}
rbenv global
#{GUEST_RUBY_VERSION}
echo installing Bundler
gem install bundler -N >/dev/null 2>&1
SHELL
end


MySQLは、初期化とユーザーの作成、データベースの作成まで行っています。


今後について

PostgreSQLやRedisなども入れることができたらなぁと思っています。

皆さん使ってみてください!


参考URL

@masuidriveさんのVagrantfileは、ubuntuだったので、それのCentOS版を今回作りました。