neutligenの日記

初心者が商用開発に挑む姿を綴ります。僕のような初心者の方に「こんな奴もいるんかー」と思って読んでもらい、コメントまで貰えたら幸いです。

開発のわだち(3):自分の開発環境を作る【2】

「自分の開発環境を作る【2】」

目標:Vagrant上のCentOs7にRailsアプリを立ち上げてブラウザからアクセス

目次:
1.rbenv/ruby-buildをインストール
2.Rubyのインストール
3.Railsのインストール
4.ブラウザからゲストOSのRailsアプリにアクセス

     

1.rbenv/ruby-buildをインストール

Rubyバージョン管理するためにrbenvとruby-buildをインストールします。 両者を適切にインストールするために必要な環境はこちらを参照。

$ sudo yum install -y gcc bzip2 openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel git make sqlite-devel net-tools

同じタイミングで以下もインストールしてます。

  • git : バージョン管理(いろんなリポジトリをクローン)

  • make:自動コンパイル用のGNUコマンド(詳しくは知りません。)

  • sqlite-devel:railsのDBとして使うsqlite3を動かすのに必要

  • net-tools:"ifconfig"とか実行するのに必要なやつ

そのあとの手順についてはこちらこちらを参考にさせて頂きました。

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv  
# githubからrbenvのリポジトリをクローン
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
# githubからruby-buildのリポジトリをクローン
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
# 「rbenvにパスを通す」というコマンドを~/.bash_profileに追記
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
# .rbenvの初期化コマンドを~/.bash_profileに追記
$ source ~/.bash_profile
# ~/.bash_profileに書いた内容を実行
$ rbenv --version
rbenv 1.0.0-19-g29b4da7
# rbenvのバージョンを確認


2.Rubyのインストール

rbenvを使ってRubyをインストールします。

$ rbenv install --list
# インストール可能なRubyのリストを表示
$ rbenv install 2.2.1
# 今回はrails tutorial 第3版のcloud9仕様に合わせました。

これが結構時間かかります。。。

rbenvはディレクトリ毎にRubyのバージョンを管理できるので全体にかかるglobalのバージョンと個々のlocalを設定できますが、今回はglobalだけ設定します。

$ rbenv global 2.2.1
$ ruby -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]


3.Railsのインストール

railsはgemなのでgemからインストールします。

$ gem search -r rails
# インストール可能なgemのリストを表示(-rはリモートのみを検索するオプション)
$ gem install rails 4.2.6 --no-ri --no-rdoc
# rails tutorial 第3版の4.2系に合わせてます。( --no-ri --no-rdocはドキュメント生成を省略するオプション)
$ rails -v
Rails 4.2.6


4.ブラウザから仮想マシンRailsアプリにアクセス

ホストOSの3000番ポートをゲストOSの3000番ポートにフォワーディングするために、Vagrantfileを編集します。 Vagrantfileの中程にある以下の記述を、

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
config.vm.network "forwarded_port", guest: 3000, host: 3000

"# config.vm.netw〜"の先頭の#を外してコメント解除して、guest/host双方のポート番号を3000に変更。→参考 設定を変更したら、ゲストOSを再起動する。

$ exit
$ vagrant reload
$ vagrant ssh


firewalld(iptablesのCentOS7用)をオフにします。

$ sudo systemctl stop firewalld.service
# firewalld を無効にする
$ sudo systemctl mask firewalld.service
$ sudo systemctl list-unit-files | grep firewalld
# OS 起動時もfirewalldが起動しないようにする
firewalld.service                           masked

これを解決するのにかなりハマりました。基本的にはiptablesの停止方法しか見つからなくてCentOS7から使われているfirewalldについてはあまり参考情報がないんですね。参考にさせて頂いたのはこちらの記事です。


railsアプリを作成して起動します。rails4.2系を仮想マシンで動かす時は注意が必要なようです。

$ rails new "作りたいアプリ名"
$ cd "作りたいアプリ名"
# 作成した("作りたいアプリ名")ディレクトリに移動
$ rails server -b 0.0.0.0
# -bはbindオプション。rails4以降でゲストOSのアプリにアクセスする場合はこのオプションが必須

ここでJavascriptのランタイムが存在しないというエラーが発生した場合はnode.jsをインストールします。

エラーの例
There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError)


自分はこちらのサイトを参考にさせて頂きました。 ちなみにtherubyracerではなくnode.jsを選んだのはherokuでデプロイを想定してるからです。(→参考

$ sudo yum install epel-release
$ sudo yum install nodejs npm
$ node -v
v0.10.42
$ rails server -b 0.0.0.0
# 改めてrailsを起動

ここまで来たらブラウザで以下にアクセス。

http://192.168.33.10:3000/

f:id:neutligen:20160314165830p:plain

やっと会えたよ このやろう 長い道のりでした。。。 ありがとう!w

環境

Vagrant 1.7.4

VirtualBox 5.0.14

Apache/2.4.6

その他お世話になったサイト

Vagrant 1.8 + CentOS 7 + VirtualBox 5 + Ruby on Rails + Mysqlで開発環境構築
Vagrant で Ruby on Rails の環境を構築するまでの手順
Ruby on Railsチュートリアルの環境構築をvagrant上でやってみたまとめ