読者です 読者をやめる 読者になる 読者になる

ボクココ

サービス開発を成功させるまでの歩み

Cloudfoundry x RubyonRails x MongoDB

Install vmc with Ruby on Rails

Set up VM Environment

VMWARE Player install
http://www.vmware.com/jp/products/desktop_virtualization/player/overview

Donwload CentOS
http://ftp.riken.jp/Linux/caos/centos/6.2/isos/x86_64/CentOS-6.2-x86_64-netinstall.iso

Create New Virtual Machine


boot VMware Player
Create New Virtual Machine
-> Instller Disk Image File CentOS-6.2-x86_64-netinstall.iso

GuestOS: "Linux Red Hat Enterprise Linux 6 64bit"
Next -> Next -> Done

Boot Virtual Machine


Get From Internet
URL:http://ftp.riken.jp/Linux/caos/centos/6.2/os/x86_64/

Install CentOS
Many Options..
Minimal Install is recommended.


Install For Rails Environment
VMware


$ ifconfig
192.168.232.** copy

Terminal


192.168.232.** Connect

$ vi /etc/yum.conf


$ yum install -y bash curl git
$ yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel

$ useradd ***
$ passwd ***

$ visudo
root ALL (ALL) ALL

ALL (ALL) ALL #-> Add

$ su ***
$ cd

$ curl -L https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer | bash
$ echo ' -s "$HOME/.rvm/scripts/rvm" && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bashrc
$ source ~/.bashrc
$ rvm -v
#1.12.3

$ sudo yum install make

Install Ruby and Rails
RVM


Rubyのバージョン管理を行ってくれる。このプロジェクトではRuby1.8.7のRails2.3.11を使ったり
あのプロジェクトではRuby1.9.3のRails3.1を使ったりといった場合に簡単に切り替えが行える。
またインストールもコマンド一つでできる。

$ rvm install 1.9.3
Ruby 1.9.3インストール
$ ruby -v
#ruby 1.9.3p125
$ gem -v
#1.8.11
$ rvm gemset create rails3.2
gemset を作るとRails3.2用のGem郡がまとめられる。

$ rvm gemset use rails3.2


$ -s "$HOME/.rvm/scripts/rvm" && . "$HOME/.rvm/scripts/rvm"

Rails 3.2

Ruby on Rails の最新版(2012年4月14日現在)。
Rails3.1は新機能をたくさん詰め込んだバージョンで、3.2はその安定版という位置づけ。
AssetPipeline(後述)やPrototype.js -> jQueryの流れは3.1から始まった。

$ gem install rails -v 3.2.3 --no-rdoc --no-ri
$ rails -v
#3.2.3



$ mkdir src
$ cd src

Node.js

Rails3.1からCoffeeScript(JavaScriptPythonライクで記述できる言語)
やSCSS(CSSの入れ子を可能にした記法)などが標準で搭載されている。
本番ではこれらをコンパイルして圧縮する。
そのためにNode.jsが必要。

$ sudo yum install wget
$ wget --http-user [Account] --http-password [Password] http://nodejs.org/dist/node-v0.6.9.tar.gz
$ tar xvzf node-v0.6.9.tar.gz
$ cd node-v0.6.9/
$ ./configure
$ make
$ sudo make install
$ node -v
v0.6.9

$ cd ~
$ mkdir dev
$ cd dev
$ rails new {RailsAppName} -T -O

  • T UnitTestを含めない
  • O DataBaseを標準のSQLITEにしない

$ cd {RailsAppName}

$ su
$ iptables -F
$ iptables -P INPUT DROP
$ iptables -P FORWARD DROP
$ iptables -P OUTPUT ACCEPT
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 110 -j ACCEPT
$
$ iptables -A INPUT -p udp --sport 53 -j ACCEPT
$ iptables -A INPUT -p tcp --sport 25 -j ACCEPT
$ iptables -A INPUT -s 192.168.1.1/16 -j ACCEPT
$ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ service iptables save

$ rails s
http://(IP or localhost):3000/
#welcome!

Push to vmc
First push with no DB


$ vi Gemfile
Before:
gem 'jquery-rails'
After:
gem 'json_pure' # < needed if you application uses JSON object
gem 'cloudfoundry-jquery-rails' # < replaced with 'jquery-rails'

$ vi config/environments/production.rb
config.secure_static_assets true

$ bundle install
$ RAILS_ENV production bundle exec rake assets:precompile
↑アセットパイプラインのプリコンパイル。
 CoffeeScript→JavaScript,SCSS→CSSに変換、圧縮


※vmc install


$ vmc login
$ vmc push --runtime ruby19 -t
** Application Name: {short-account}-{Application Name}
** Service: MongoDB.



# Next Time..
$ vmc update {Application Name}

Rails with MongoDB for vmc

$ vi Gemfile
gem 'mongoid'
gem 'mongo_ext'
gem 'bson_ext'

$ bundle install

MongoDB

ご存知vmcでサポートされているDB.
RailsではMongoidというマッパを使ってDBを操作するのが一般的。

$ sudo yum -y install git-core scons gcc-c++ glibc-devel
$ cd ~/src
$ wget --http-user [Account] --http-password [Password] http://www.mongodb.org/dr/fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.4.tgz/download
$ tar xzf mongodb-linux-x86_64-2.0.4.tgz
$ sudo mkdir -p /data/db/
$ sudo chown `id -u` /data/db
$ ./mongodb-linux-x86_64-2.0.4/bin/mongod
#Ctrl+C

Register init.d
$ curl -L http://ewanleith.com/downloads/mongodb.txt > mongodb.txt

$ sudo cp mongodb.txt /etc/init.d/mongodb
$ sudo chmod 755 /etc/init.d/mongodb
$ sudo chown root:root /etc/init.d/mongodb
$ sudo mkdir -p /usr/local/mongodb/bin/
$ sudo cp -r mongodb-linux-x86_64-2.0.4/bin/* /usr/local/mongodb/bin/
$ sudo chkconfig
$ sudo chkconfig mongodb on
$ sudo vi /etc/sysconfig/iptables

  • A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT

↑add
$ sudo service iptables restart
$ sudo /etc/init.d/iptables restart

$ sudo init 0
# reboot


Boot
$ su {user}

$ rvm 1.9.3@rails3.2

$ cd dev/{RailsAppName}
$ rails g mongoid:config
config/mongoidの生成
$ rails g scaffold Post name:string body:text
Webアプリの骨組みを作成

$ rails s
http://(IP or localhost):3000/posts

$ vi config/mongoid.yml

Please take care of mongodb-*** version.

production:
host: <% JSON.parse( ENV['VCAP_SERVICES'] )['mongodb-2.0.1'].first['credentials']['hostname'] rescue 'localhost' %>
port: <% JSON.parse( ENV['VCAP_SERVICES'] )['mongodb-2.0.1'].first['credentials']['port'] rescue 27017 %>
database: <% JSON.parse( ENV['VCAP_SERVICES'] )['mongodb-2.0.1'].first['credentials']['db'] rescue 'cloud_foundry_mongodb_tutorial' %>
username: <% JSON.parse( ENV['VCAP_SERVICES'] )['mongodb-2.0.1'].first['credentials']['username'] rescue '' %>
password: <% JSON.parse( ENV['VCAP_SERVICES'] )['mongodb-2.0.1'].first['credentials']['password'] rescue '' %>

$ vmc update {RailsAppName}