開発のわだち(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 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を起動
ここまで来たらブラウザで以下にアクセス。
やっと会えたよ このやろう 長い道のりでした。。。 ありがとう!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上でやってみたまとめ