Rails+Capistrano+Apache2.2+Mongrel_clusterのメモ

10月 17th, 2008 admin

まるまる2日間かかった。いろいろはまりすぎ。

前提

debian etch
mod_rails(passenger)はメモリを食いすぎて使えなかった
subversionを使っている
デプロイは自動化したい

OpenVZのVEの設定

まず最初に仮想マシンの容量が足りなくてRailsが起動しない。

vzctl set 2000 --privvmpages 2G --save #メモリ上限を2Gにする
vzctl set 2000 --diskspace 10G --save

インストール

サーバになにも入っていないのでどんどん入れる

aptitude install apache

aptitude install ruby
aptitude install rubygems

aptitude install mysql-server
aptitude install libmysqlclient-dev
aptitude install subvesion

gem install rails
gem install mysql
gem install gettext
gem install mongrel
gem install mongrel_cluster
gem install capistrano

#今回のアプリ用のもの
gem install ferret
gem install image_science
gem install amazon-ecs

$ unzip FreeImage3100.zip
$ cd FreeImage
$ make

Apache2.2の設定

このへんを見ながらやらせてもらった。はまったのはmod_proxyの設定で
/etc/apache2/mods-enabled/proxy.confのProxyディレクティブのDeny from allに気がつかなかったこと
conf.d以下以外に.confがあるなんて知りませんでした。

a2enmod rewrite
a2enmod proxy_balancer

でproxy_balancerとproxyを有効にする。

バーチャルホストの設定にこんなのを加える

HTML:
  1. <proxy *>
  2.                 Order deny,allow
  3.                 Deny from all
  4.                 Allow from all
  5.         </proxy>
  6.  
  7.         ProxyRequests Off
  8.         ProxyPass / balancer://appname/ timeout=2
  9.         ProxyPassReverse / balancer://appname/
  10.  
  11.         <proxy balancer://appname>
  12.                 BalancerMember http://127.0.0.1:3000 loadfactor=10
  13.                 BalancerMember http://127.0.0.1:3001 loadfactor=10
  14.                 BalancerMember http://127.0.0.1:3002 loadfactor=10
  15.                 BalancerMember http://127.0.0.1:3003 loadfactor=10
  16.         </proxy>

/etc/init.d/apache2 force-reload

でリロード

参考サイト

burn baby burn!!!(Archives)
【Rails】mongrel cluster&apacheのリバースプロキシで複数のアプリ共存

mongrel clusterの設定

これはあまりはまらなかった。

mongrel_rails cluster::configure

とやると雛形がconfig/mongrel_cluster.ymlでできるので
適当に編集して、こんなのができた

log_file: /home/appname/log/mongrel.log
port: "3000"
environment: production
address: 0.0.0.0
pid_file: tmp/pids/mongrel.pid
servers: 4

あとは

mongrel_rails cluster::start

で動くはず。

参考サイト

83s : config/mongrel_cluster.ymlの書き方、とか
Rubyist - バリケンのRuby日記 - mongrel_cluster

spinファイルの作成

capistranoを使うとファイルの展開後にscript/spinというのを実行してくれる
今回は使わないのでファイルだけ作っておく

$ vi script/spin

↓中身

#!/bin/sh

capstrano

アプリケーションのルートディレクトリで

capify .

でCapistranoのレシピといわれるファイルがconfig/deploy.rbに作られる
それをいい感じに編集

RUBY:
  1. require 'mongrel_cluster/recipes'
  2. set :application, "appname"
  3. set :repository,  "http://path to subversion"
  4.  
  5. set :user, "ssh username"
  6. set :use_sudo, false
  7. set :scm_username, "svnuser"
  8. set :scm_password, "svnpass"
  9.  
  10.  
  11.  
  12. # If you aren't deploying to /u/apps/#{application} on the target
  13. # servers (which is the default), you can specify the actual location
  14. # via the :deploy_to variable:
  15. set :deploy_to, "/var/www/#{application}"
  16.  
  17. set :mongrel_conf, "#{current_path}/config/mongrel_cluster.yml"
  18. set :mongrel_clean, true
  19. # If you aren't using Subversion to manage your source code, specify
  20. # your SCM below:
  21.  
  22. role :app, "192.168.1.x"
  23. role :web, "192.168.1.y"
  24. role :db,  "192.168.1.x", :primary => true
  25.  
  26. task :after_update_code, :roles => :app do
  27.   run "chmod u+x #{release_path}/script/spin"
  28. end

cap deploy:setup

でリモートに準備がされる。

cap deploy:cold

でsubversionからファイルが展開されてmongrelが再起動される

参考サイト

つくるぶガイドブログ: capistrano で本番環境にデプロイ
FFTT : Capistrano(2006年4月の情報)
第7回 Rails アプリケーションの起動・停止・再起動 - Capistrano 入門 - Ruby on Rails with OIAX

まとめ

・こんなに苦労する必要があるRailsはなにかおかしい
・Capistranoの資料がもうちょっとあればなぁと思った。
・passenger(mod_rails)は普通に動いたのでメモリがあれば全然使えそう

act_as_authenticated+fcgiでapplication error

4月 1st, 2008 admin

webrickなら大丈夫なんだけど、fcgiにしたとたんにact_as_authenticatedまわりのUser.saveでfcgiこける
ログにもなにもでていない。

原因はUserモデルのencrypt_passwordのところでログにパスワードとかを書き出そうとしてp passwordとかやってるところだった。

要はact_as_authenticatedが原因ではなくpで標準出力に文字をだしているということ。試してみたところcontrollerなどでpするのもだめでした。
いろいろ特殊な環境だったのでなにが原因かはわかりませんが、とにかく標準出力になにか出そうとしてはだめらしい。

RoRの学習にNetBeansを使う理由

3月 4th, 2008 admin

RailsによるアジャイルWebアプリケーション開発 第2版
のチュートリアルで作るDepotアプリケーションがサンプルプロジェクトとして入ってるんです。

いまからDepotの概要を見ようとしていたので驚いた。そんだけなんですけどね。

NetBeansの使い方とか

NetBeansでRuby on Rails開発
http://journal.mycom.co.jp/articles/2008/01/27/rubyonrails/index.html

NetBeans 6.0.1 日本語版で試す「10分で作る Ruby Weblog」チュートリアル - Masaki Katakai's Weblog
http://blogs.sun.com/katakai/entry/screenshot_for_creating_a_ruby