ruby on rails触ってみる。(時々unicorn) その1
Ruby on Railsを触ってみたい。 手始めにこれをやりたい!
今回の参考サイト
さくらのVPS を改めて使いはじめる 9 – Ruby、Redmine、Subversion – アカベコマイリ
http://henteco-labs.com/labs/2014/04/11/rails-app-server/#sec2-4
Rails x unicorn のアプリをサブディレクトリで動かす - @Konboi memo
次世代Ruby on RailsサーバーUnicorn(汎用のRackアプリケーションサーバ)を使ってみた
関連パッケージのインストール
$ sudo yum install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel mysql-devel httpd-devel ImageMagick ImageMagick-devel
Rubyソースダウンロード
$ cd $ wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.3.tar.gz $ tar zxvf ruby-2.1.3.tar.gz $ rm ruby-2.1.3.tar.gz
ソースのコンパイル
$ cd ruby-2.1.3/
$ ./configure
$ make
checkinstallを使用したRPM化
$ sudo checkinstall --fstrans=no
あ、checkinstallの導入について触れてなかった。。。 アカベコマイリさん参照
さくらのVPS を改めて使いはじめる 9 – Ruby、Redmine、Subversion – アカベコマイリ
インストール&バージョン確認
$ sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/ruby-2.1.3-1.x86_64.rpm $ ruby -v
ゴミ掃除
$ cd $ sudo rm -rf ruby-2.1.3/
Gemバージョン確認
$ gem -v
2.2.2
Gemバージョン最新化
$ sudo gem update --system
Gemバージョン確認(再)
$ gem -v
2.4.2
Bundlerインストール
$ sudo gem install bundler --no-rdoc --no-ri
Railsインストール
$ sudo gem install rails
Railsバージョン確認
$ rails -v
Rails 4.1.6
node.jsインストール
$ cd $ wget http://nodejs.org/dist/v0.10.32/node-v0.10.32.tar.gz $ tar zxvf node-v0.10.32.tar.gz $ rm node-v0.10.32.tar.gz
ソースのコンパイル
$ cd node-v0.10.32/
$ ./configure
$ make
checkinstallを使用したRPM化
$ sudo checkinstall --fstrans=no
インストール&バージョン確認
$ sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/node-v0.10.32-1.x86_64.rpm $ node -v v0.10.32
ゴミ掃除
$ cd $ rm -rf node-v0.10.32/
アプリ生成(ここでは/var/rails/フォルダにtwitter-practiceというアプリを作成することとする)
$ sudo mkdir /var/rails/ $ cd /var/rails/ $ sudo rails new twitter-practice ・ つらつらと生成ログが出てくるけど読み飛ばす。 ・
$ cd twitter-practice $ sudo vi Gemfile -- ファイルの末尾に下記内容を追記する # unicorn gem 'unicorn', group: :development -- ファイル編集終了後に下記コマンドを実行するとunicornがダウンロードされる $ sudo bundle install
Railsの設定変更(今回作成するアプリをサブディレクトリとして公開するための設定)
$ sudo vi /var/rails/twitter-practice/config.ru --以下の内容に書き換える ## run Rails.application require ::File.expand_path('../config/environment', __FILE__) if ENV['RAILS_RELATIVE_URL_ROOT'] map ENV['RAILS_RELATIVE_URL_ROOT'] do run Rails.application end else run Rails.application end
unicorn設定ファイルを編集する。
$ sudo touch config/unicorn.rb $ sudo vi /var/rails/twitter-practice/config/unicorn.rb --以下の内容に書き換える rails_root = `pwd`.chomp worker_processes 3 timeout 15 preload_app true # TCPソケットで使う場合 # listen 3000 # Unixドメインソケットを使う場合(WEBサーバーと連携する場合)※1 listen "#{rails_root}/tmp/sockets/unicorn.sock" pid "#{ rails_root }/tmp/pids/unicorn.pid" # ログの設定方法. stderr_path "#{ rails_root }/log/unicorn.log" stdout_path "#{ rails_root }/log/unicorn.log" before_fork do |server, worker| ActiveRecord::Base.connection.disconnect! old_pid = "#{ server.config[:pid] }.oldbin" if File.exists?(old_pid) && server.pid != old_pid begin Process.kill("QUIT", File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH # someone else did our job for us end end end after_fork do |server, worker| ActiveRecord::Base.establish_connection Signal.trap 'TERM' do puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT' end end
※1 後述のnginxの設定と合わせる。
nginxの設定変更1(unicornとの連携)
$ sudo vi /etc/nginx/nginx.conf
-- httpブロック内に下記内容を追記
# プロキシサーバーを指定※1
upstream backend {
server unix:/var/rails/twitter-practice/tmp/sockets/unicorn.sock;
}
※1 前述のnginxの設定と合わせる。
nginxの設定変更2(サブディレクトリ"twitter"アクセス時の挙動の設定)
$ sudo vi /etc/nginx/conf.d/default.conf -- serverブロック内に下記内容を追記 location ^~ /twitter/ { try_files $uri @proxy; } # プロキシに渡す設定 location @proxy { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Connection ""; proxy_http_version 1.1; proxy_redirect off; proxy_pass http://backend; } # 静的ファイルはNginxでレスポンス location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ { expires 1y; } location ~ /\..+ { deny all; }
サンプルのビューとコントローラ生成。
$ cd /var/rails/twitter-practice/
$ sudo rails g controller users index show
アプリ起動
$ sudo bundle exec unicorn_rails -c config/unicorn.rb -E development -D --path /twitter
これでhttp://www.negimiso.net/twitter/users/showにアクセスできるようになった。
アプリ停止
$ sudo ps aux | grep unicorn $ sudo kill -QUIT $PID
・頭が混乱してきたので自問自答コーナー
Q,今更だけどunicornって何よ。
A,HTTPサーバ
Q,わざわざ用意しないといけないの?
A,WEBrickというHTTPサーバがrubyに同梱されてて、こっちを使えばunicornは不要。
Q,なんで突然unicorn導入したの?
A,興味本位としか言いようがない。
Q,本当に高性能なの?
A,WEBrickと違って、複数のプロセスが立ち上がって暇なプロセスがリクエストに対応する結果、快適らしい。
とはいっても、そもそもWEBrick使ってないし、ガッツリRailsアプリ作ったわけでもないので快適さが判らん上に比較もできない。 まずはバカ正直に標準的な手法で行くべきだったかなぁ?
小学生が5時間くらいで実装できたアプリを作るつもりが unicornとかに寄り道したおかげですでに5時間近く費やした気もするが、気にしないでおこう。
次回、改めて本題のRuby on Railsのアプリを作成してみませう。