Ruby on Railsチュートリアルの写経を始めました
Ruby on Rails チュートリアル:実例を使って Rails を学ぼう
Vagrant+Chefで環境構築する方法がなんとなく理解できてきましたが、ただ環境を作るだけじゃもったいないのでRailsチュートリアルの写経を始めてみようと思います。環境は以下の通りです。
OS | Windows7 x64 |
---|---|
VirtualBox | VirtualBox 4.3.8 for Windows hosts |
Ruby | ruby 1.9.3p484 (2013-11-22) [i386-mingw32] |
Vagrant | Vagrant 1.5.1 |
chef | chef (11.10.4 x86-mingw32) |
knife | knife-solo (0.4.1) |
berkshelf | berkshelf (2.0.14) |
VagrantとChefの導入についてはVagrant + Chefの導入 vol.1 - m-namikiの日記とVagrant + Chefの導入 vol.2 - m-namikiの日記で行ってますが、vagrant用のプラグインとberkshelfのインストールをしてなかったのでしておきます。
saharaのインストール
saharaは仮想サーバのスナップショットのようなものを作ることができるvagrant用プラグインです。環境のロールバック、コミットが可能なので何かあった場合に簡単に変更を取り消すことができます。インストール方法は以下の通りです。
vagrant plugin install sahara
vagrant-omnibusのインストール
vagrant-omnibusは仮想サーバ起動時にChefがインストールされているかどうかをチェックして、インストールされていない場合は自動でインストールしてくれるvagrant用プラグインです。環境構築を自動化したいのにそのために手動でChefをインストールするのは本末転倒なので非常にありがたいですね。インストール方法は以下の通りです。
vagrant plugin install vagrant-omnibus
Berkshelfのインストール
BerkshelfはChefのはcookbookの依存関係を管理するツール(らしい)です。まだhttp://community.opscode.com/からcookbookをダウンロードするのが楽になるくらいしか分かっていませんが、インストールしておきます。gemとして提供されているので以下の通りにインストールします。
gem install berkshelf --no-ri --no-rdoc
仮想サーバの作成
ここから仮想サーバの作成を行っていきます。
cd C:\Users\m-namiki\Documents\20_vagrant mkdir rails3_tutorial cd rails3_tutorial vagrant init chef/centos-6.5
chef-repoの作成
Vagrantfileがある場所にchef用のリポジトリを作成します。
knife solo init chef-repo cd chef-repo knife cookbook create ruby_env -o site-cookbooks
Berksfileの編集
Berkshelfがインストールしてあるとknife cookbook
時にBerksfileが作成されるので編集します。
// chef-repo/Berksfile site :opscode cookbook 'yum' cookbook 'ruby_build' cookbook 'rbenv' cookbook 'nodejs'
rubyのインストールはrbenv+ruby_buildで行います。nodejsについては、rails server
を実行したときにJavaScriptランタイムがインストールされていないと言われたのでインストールします。で、Berkshelfの実行。
berks install --path cookbooks
これでcookbooks/以下にyumやruby_build、rbenv、その他それらと依存関係があるcookbookがインストールされました。
site-cookbooks/ruby_env/recipes/default.rbの編集
続いてレシピの編集です。
# for install Ruby include_recipe "rbenv::default" include_recipe "rbenv::ruby_build" include_recipe "rbenv::rbenv_vars" service "iptables" do action [:disable, :stop] end log "done iptables stop." # add the EPEL repo yum_repository 'epel' do description 'Extra Packages for Enterprise Linux' mirrorlist 'http://mirrors.fedoraproject.org/mirrorlist?repo=epel-6&arch=$basearch' fastestmirror_enabled true gpgkey 'http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6' action :create end # add the Remi repo yum_repository 'remi' do description 'Les RPM de Remi - Repository' baseurl 'http://rpms.famillecollet.com/enterprise/6/remi/x86_64/' gpgkey 'http://rpms.famillecollet.com/RPM-GPG-KEY-remi' fastestmirror_enabled true action :create end %w{sqlite-devel}.each do |p| package p do action :install end end log "done package install." rbenv_ruby "1.9.3-p545" do ruby_version "1.9.3-p545" global true end log "done ruby install." gem_package "rbenv-rehash" do action :install end log "done rehash install." gem_package "rails" do action :install version '3.2.14' end log "done rails3 install."
rbenvでrubyをインストールした場合、gem install
後に必ずrbenv rehash
をしなければならないそうなので、それを回避するためにrbenv-rehashを一緒にインストールしておきます。
Vagrantfileを編集
最後にVagrantfileを編集します。以下は変更部分です。
# Railsのサーバ用ポート config.vm.network "forwarded_port", guest: 3000, host: 3333 config.vm.network "private_network", ip: "192.168.33.10" config.vm.provider "virtualbox" do |vb| vb.customize ["modifyvm", :id, "--memory", "1024"] end config.vm.provision "chef_solo" do |chef| chef.cookbooks_path = ["./chef-repo/cookbooks", "./chef-repo/site-cookbooks"] chef.add_recipe "yum" chef.add_recipe "rbenv" chef.add_recipe "ruby_env" chef.add_recipe "nodejs" end # この行追加 config.omnibus.chef_version = :latest
forwarded_portについては、rails server
実行時にhttp://localhost:3000にアクセスしろと言われますが、そのままではアクセスできなかったので3333に変更しました。
起動
準備が整ったのでvagrant up
で起動します。自分の環境だとrubyとnodejsのインストールにそれぞれ10分くらい掛かりましたが、無事インストールが完了して起動しました。
[vagrant@localhost ~]$ ruby -v ruby 1.9.3p545 (2014-02-24 revision 45159) [x86_64-linux] [vagrant@localhost ~]$ rails -v Rails 3.2.14 [vagrant@localhost ~]$ node -v v0.10.15
で、ここまでの状態を一旦コミットしておきます。
vagrant sandbox on vagrant sandbox commit
これで何か変更を加えてもすぐに元に戻せるので安心です。
作成したVagrantfileやchef-repoを以下で公開してみました。
m-namiki/rails3-tutorial_environment · GitHub
写経したものはこっちに公開していきます。
m-namiki/rails3-projects · GitHub
実はこれをやってみたかった:)