VMWare Playerでプロキシ経由のRubyOnRails環境構築

Ruby on Railsの試験環境をVMWare Playerで作っていて、プロキシ周りでいろいろと躓いたので、備忘録に残しておきます。

 

●やりたいこと

 ・GETリクエストで適当なパラメータを投げたら、それに応じた内容のHTMLを返すこと

 ・投げたパラメータによって、タイムアウトを起こしたり、任意のHTTPステータスコードを返すようにすること

 

 

 

 

VMWare OS環境の準備: CentOS6.7

VMWare PlayerにNAT設定でCentOS6.7がすでにインストールされているものとします。
※VMWarePlayerのNAT設定は、C:\users\all users\vmware\vmnetnat.cnfに記述します。
(例)22番のSSHポートをホストPCの8822に、80番のhttpポートをホストPCの8880ポートにマッピングする場合・・・
8822 = 192.168.58.129:22
8880 = 192.168.58.129:80

反映するためにおそらくPCの再起動が必要です。

 

 


rubyのインストール

・必要なパッケージのインストール
yum -y install readline-devel git gcc zlib zlib-devel openssl openssl-devel sqlite sqlite-devel libffi-devel readline gcc-c++ glibc-headers libyaml-devel


・rbenvインストールに必要なプロキシ設定
git config --global http.proxy http://proxy.example.com:8080
git config --global https.proxy http://proxy.example.com:8080


・rbenv をインストール(clone)する
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv


・PATH に追加
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile


・.bash_profile に追加
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile


環境変数を有効化
exec $SHELL -l


・rbenvのバージョン確認

rbenv --version
rbenv 0.4.0-74-g95a039a


ruby-build を インストール(clone)する
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build


・プロキシ設定
echo 'proxy = "https://proxy.hogehoge.net:8080/"' >> ~/.curlrc
echo 'http_proxy = http://proxy.hogehoge.net:8080/' >> /etc/wgetrc


ruby-buildのプロキシ設定
vi /root/.rbenv/plugins/ruby-build/bin/ruby-build
http_head_curl() {
curl -qsILf "$1" >&4 2>&1
}
http_get_curl() {
curl -q -o "${2:--}" -sSLf "$1"
※これらの-qオプションを取り除く


ruby の最新版を確認
rbenv install --list
このように表示される。
Available versions:
1.8.6-p383
1.8.6-p420
1.8.7-p249
:
:
2.0.0-p195
2.0.0-p247
2.0.0-p353 ← こいつが2.0系の最新版っぽい
2.0.0-preview1
:


ruby のインストール
rbenv install -v 2.3.0


・再読み込み
rbenv rehash


rubyバージョンを確定
rbenv global 2.3.0


・バージョンの確認
ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]


・テスト用rubyで動作確認
こんな内容でhello.rbを作って動かしてみる。
puts 'Hello, world!'

ruby hello.rb
→Hello, world! と表示されればOK。

 

 


Railsのインストール


gem update --system

gem install --no-ri --no-rdoc rails

gem install bundler

rbenv rehash

・インストールバージョンの確認
rails -v
Rails 4.2.6

 

 

 

Railsアプリケーション作成
・アプリケーションを配置するディレクトリに移動
cd /root/pgm/ruby/testRails


・アプリケーション作成
rails new アプリケーション名(ここではtestRails)


cd testRails

 

 

●WEBricks起動
ここではApacheではなく、Railsに含まれている簡易WebサーバWEBricksを使います。

gem install uglifier

vi Gemfile
gem 'therubyracer', platforms: :ruby ←コメントを外す


bundle install

 


・WEBRicks起動
rails server -p 80 -b 192.168.58.129 ←明示的にIP指定しないとだめです。
=> Booting WEBrick
=> Rails 4.2.6 application starting in development on http://192.168.58.129:80
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2016-04-13 03:42:06] INFO WEBrick 1.3.1
[2016-04-13 03:42:06] INFO ruby 2.3.0 (2015-12-25) [x86_64-linux]
[2016-04-13 03:42:06] INFO WEBrick::HTTPServer#start: pid=70530 port=80


・試しにアクセスしましょう。
http://ホストPCのIP:8880/
アクセスすると、RubyOnRailsのトップページが出ます。
About your application’s environment をクリックすると、インストール環境の情報が見れます。

 

 

●静的コンテンツ
rubyアプリケーションディレクトリのpublicの下に置くと、静的コンテンツとして閲覧可能となります。
/root/pgm/ruby/testRails/public

ログ・・・/root/pgm/ruby/testRails/log/development.log

DB・・・/root/pgm/ruby/testRails/db
RailsでDBを使う場合は、デフォルトはここにSQLiteが配置されます。

 

 

 

●コントローラ作成

rails generate controller testRails

(Railsアプリケーションのルート)/app/controllers/testRails_controller.rbがコントローラ本体に関する記述がされたファイルです。
ここにメソッドを記述していきます。

def launch
arg = params[:rocket]
if arg == "apollo"
render "testRails/apollo"
elsif arg == "shuttle"
sleep(10)              ←タイムアウトをシミュレーションする場合
render "testRails/SpaceShuttle"
else
render "testRails/h2a", status: 500  ←ステータスコードを任意のものにする場合
end
end

 


●ルーティング作成
呼び出しとアクションの紐づけを行います。
(Railsアプリケーションのルート)/config/routes.rb

編集します。下の内容の場合、http://ホスト名/rocket にアクセスすると先ほど作成したlaunchメソッドを動かします。


get 'rocket' => 'testRails#launch'


・WEBRicks起動(※停止するときにはCtrl-Cです)
rails server -p 80 -b 192.168.58.129

もしエラーが出たらrake routes でチェックします。
rake routes
ArgumentError: You should not use the `match` method in your router without specifying an HTTP method.

 


●ビューテンプレートの作成

(Railsアプリケーションのルート)/app/views/testRails

ここにxxx.html.erbファイルを作っていきます。
testRails_controller.rbで"testRails/apollo"と記載しましたので、
apollo.html.erbで適当なHTMLテンプレート等を作成します。jsonをレスポンスとして返したいのならjsonファイルをそのまま置けばいいです。

 

これで、
http://ホスト名/testRails?rocket=apollo
http://ホスト名/testRails?rocket=shuttle
にアクセスすれば、それぞれ作成したViewテンプレートで表示されるはずです。

 

 

 

一番躓いたのは、プロキシでした。なかなか社内環境でプロキシがないところって、ないですからね。ちゃんちゃん。