2011/09/23

Ruby Passenger with Nginx on FreeBSD

事實上 FreeBSD 安裝很簡單,ports 都整理好了:
cd /usr/ports/www/rubygem-passenger
make config  # "Use Nginx"
make install clean


不過這次因為 Redmine 卡在套件版本相依性,除了 Ruby 從 ports 裝,其他 RubyGems、Rails、Rake 都沒用 ports。好險裝 passenger 再編譯 nginx 模組沒想像中的困難。

安裝 passenger:
gem install passenger

裝好後 passenger 的資料會在 /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.9/ 目錄下,nginx 模組的程式碼會在底下的 ext/nginx/。

找到以後就可以準備編譯 nginx。到 /usr/ports/www/nginx 目錄下編輯 Makefile,在「CONFIGURE_ARGS」後加上 --add-module 參數:
CONFIGURE_ARGS+=--prefix=${ETCDIR} \
      --with-cc-opt="-I ${LOCALBASE}/include" \
      --with-ld-opt="-L ${LOCALBASE}/lib" \
      --conf-path=${ETCDIR}/nginx.conf \
      --sbin-path=${PREFIX}/sbin/nginx \
      --pid-path=${NGINX_RUNDIR}/nginx.pid \
      --error-log-path=${NGINX_ERRORLOG} \
      --user=${WWWOWN} --group=${WWWGRP} \
      --add-module=/usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.9/ext/nginx

接著 make install clean 便會自動將 passenger 模組編譯進去。


最後修改 nginx.conf:
http {
   ...
   passenger_root  /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.9;
   passenger_ruby  /usr/local/bin/ruby;
   passenger_max_pool_size  10;
   ...
   server {
      listen 80;
      server_name  my.site;
      root /path/to/my/site;
      passenger_enabled on;
      passenger_use_global_queue on;
   }
}


參考資料
Installing Passenger Nginx module on FreeBSD
http://www.snippety.org/articles/2009/05/16/installing-passenger-nginx-module-on-freebsd/


Phusion Passenger users guide, Nginx version
http://modrails.com/documentation/Users%20guide%20Nginx.html

2011/09/16

MySQL 5.5 編碼相關參數異動

前陣子把主機上的 MySQL 從 5.1 升到 5.5,啟動時發生錯誤:
[ERROR] /usr/local/libexec/mysqld: unknown variable 'default-character-set=utf8'
[ERROR] Aborting

看了「What Is New in MySQL 5.5」才知道 default-character-set 參數已經不再使用,my.cnf (in FreeBSD) 的設定改需要稍做修改:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

2011/09/10

sshd Listen on Multi Port


某些網路環境會擋 port 22,sshd 只 listen port 22 就沒辦法用。

sshd 可以同時 listen 多個 port,在 FreeBSD 中修改 /etc/ssh/sshd_config:
Port 22
Port 2222

重新啟動 sshd:
/etc/rc.d/sshd restart

sockstat 看一下應該就會看到:
< sockstat | grep sshd
root     sshd       1586  4  tcp4   *:22                  *:*
root     sshd       1586  6  tcp4   *:2222                *:*