雑記

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|
2007|01|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|09|11|
2009|02|03|05|06|07|08|10|11|12|
2010|01|03|04|05|06|07|08|09|10|
2011|05|06|09|10|
2012|03|07|09|12|
2013|01|02|04|05|07|08|10|11|
2014|04|05|08|10|12|
2015|01|05|
2016|09|

2008-02-29

[FreeBSD][Rails] mongrel_rails の自動起動スクリプト

ちょっと探しても見つからなかったのでを自作。確認したのは6.1の環境。使い方は上のリンクから取得したスクリプトを/usr/local/etc/rc.d/rails という名前で(実行ビットを立てて)保存し、/etc/rc.confに以下のような記述を追加する(reils_port以下は省略可)。

rails_enable="YES"# Rails 有効
rails_port="3000"# ポート番号
rails_user="rails"# mongrel_railsを実行するアカウント
rails_chdir="/home/www/rails"# Rails がインストールされているディレクトリ
rails_pidfile="${rails_chdir}/log/rails.pid" # PIDファイル(ディレクトリは$rails_userアカウントに対して書き込み許可する必要あり)

apacheのProxyを使う場合、apacheでProxyの設定をした後、/usr/local/etc/rc.d/apach22 等のapacheの起動スクリプト内のREQUIRE行を以下のように書き換える。

# REQUIRE: LOGIN cleanvar rails

これで、Mongrelが起動した後、apacheが起動するようになる。こうしないと手元の環境ではMongrelの起動前に転送するURLにアクセスがあった時に、へんなキャッシュが効いて2度と(しばらく?)アクセスできなくなってしまったので。

作ってみて分かったのは、rcスクリプトとmongrelの相性がやけに悪いということ。原因はmongrel_railsがstart,stop等をオプションで指定する制御型のコマンドであることと、Rubyスクリプトなのでプロセス名がmongrel_railsにならないこと。後者については一般的なスクリプト系コマンドに対する対策はしてあるっぽいんだけど、なぜかcommand_interpreterを指定しないとうまくいかなかった。ruby18の絶対パスが埋め込みというのはカッコ悪いので、原因と対策が分かる人がいたら教えてください。