前エントリに引き続き、
ずっとローカルPCに残していたRedmineのインストールメモをこの機会にエントリにした。
導入先は同じくさくらの共有レンタルサーバ(スタンダード)

■導入の前に

いろいろ試してみたところ、さくらの共有ホスティングにインストールできるRedmineのバージョンは
0.8.7が最高で、それ以上のバージョン(1.x系)は同様の手順を踏んでも動作を確認できなかった。
Google先生に聞くと、どうやら1.x系を動作できたというツワモノがいるようだけど具体的な解決には至らず。
ちなみにいざ動作確認というところまでは、1.x系はi18nの追加インストール、
rubygemsのバージョンを1.4.2にダウングレード(ここまでは初期設定のrake実行中に引っかかる)
そしてrails2.1系までに使用されたdispatcher経由によるcgi起動(本来はrails2.2系以上はrackベース)を試み失敗に終わった。。

■導入ルール

  • Rubyはrvm経由でインストール
  • Redmineはv0.8.7を使用
  • DBはSQLite3を使用
  • dispatcherはgateway.cgiを使用
  • gateway.cgiに必要なfcgiのインストール先は「$HOME/local/fcgi」
  • fcgi導入前のソースコードは「$HOME/local/fcgi/src」にダウンロード

■rvm経由でRuby1.8.7をインストール

さくらのレンタルサーバには標準でRuby1.8.7が使用できるが、今後の別バージョン利用など
こちらでバージョンをコントロールできるよう、別途rvm経由でインストールした

bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
rvm install 1.8.7
[[ -s "/home/iwakou/.rvm/scripts/rvm" ]] && source "/home/iwakou/.rvm/scripts/rvm"
rvm --default 1.8.7

# ログイン直後にrvm経由のRubyを優先的に参照する場合は.bashrcに以下を追加
echo '[[ -s "/home/iwakou/.rvm/scripts/rvm" ]] && source "/home/iwakou/.rvm/scripts/rvm"' >> ~/.bashrc

■iconvの拝借

さくらのレンタルサーバはFreeBSD系が使われており、このプラットフォームに
Rubyをインストールした場合はiconvは付属しない(このへんはよくわかってない)
そのため、標準搭載のRubyからiconvを拝借することに。

cp /usr/local/lib/ruby/1.8/i386-freebsd7/iconv.so ~/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/i386-freebsd7.1/

■fcgiのインストール

さくらのレンタルサーバは原則デーモンを立てることができないため、
railsアプリケーションはcgiモードでの起動となる。
しかしそれではレスポンスがあまりにもお粗末なため、およそ1分間プロセスを常駐させ
自動で落下させるdispatcherのgateway.cgiの使用すべく、ベースとなるfcgiをインストールした。

mkdir -p $HOME/local/fcgi/src
cd $HOME/local/fcgi/src
wget http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
tar xzvf fcgi-2.4.0.tar.gz
cd fcgi-2.4.0
./configure --prefix=$HOME/local/fcgi
make
make install

■必要なgemライブラリ一式をインストール

Redmineは基本rake freezeにより必要なrailsをあらかじめ保持しているが
念のためインストールしておく。それ以外もあわせてインストール。

gem install rails -v=2.1.2
gem install sqlite3-ruby
gem install fcgi -- --with-fcgi-include=$HOME/local/fcgi/include --with-fcgi-lib=$HOME/local/fcgi/lib

■Redmineのダウンロードと設定

前述の通りv0.8.7をダウンロードし、gateway.cgiから起動させる
また、URLは「http://xxxx.sakura.ne.jp/redmine/」を想定した設定とした

cd ~
wget http://rubyforge.org/frs/download.php/67144/redmine-0.8.7.tar.gz
tar xzvf redmine-0.8.7.tar.gz
cd redmine-0.8.7
mkdir log/drb_gateway


cp config/database.yml.example config/database.yml
vi config/database.yml
# DB設定(SQLite3を想定)、productionモードの指定先を変更する
production:
  adapter: sqlite3
  dbfile: db/redmine.db


vi config/environment.rb
# 環境設定、以下を6行目付近に追加
ENV['GEM_HOME'] ||= '/home/XXXX/.rvm/gems/ruby-1.8.7-p334'
ENV['RAILS_ENV'] ||= 'production'


vi config/environments/production.rb
# 最終行に以下を追加
ActionController::AbstractRequest.relative_url_root = '/redmine'


cp ~/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/gems/1.8/gems/rails-2.1.2/lib/commands/ncgi/* script/


chmod 755 script/listener
vi script/listener
## 1行目の実行パスの変更、5行目「require 'fcgi_handler'」直前にrequire系2行を追加 
#!/usr/bin/env ruby
require 'rubygems'
gem 'fcgi'
## 17行目「super()」直前に以下2行を追加
$stdin = self.stdinput
$stdout = self.stdoutput


chmod 755 script/tracker
vi script/tracker
## 1行目の実行パスの変更
#!/usr/bin/env ruby


cp ~/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/gems/1.8/gems/rails-2.1.2/dispatches/gateway.cgi public/


chmod 755 public/gateway.cgi
vi public/gateway.cgi
## 1行目の実行パスの変更、64行目のsleep値を変更
#!/usr/bin/env ruby
sleep 1


vi public/.htaccess
## 11行目をコメントアウト、46行目「dispatch.cgi」を「gateway.cgi」に変更
#Options +FollowSymLinks +ExecCGI
RewriteRule ^(.*)$ gateway.cgi [QSA,L]


rake config/initializer/session_store.rb
rake db:migrate RAILS_ENV="production"
rake redmine:load_default_data RAILS_ENV="production"


cd ~/www
ln -s ~/redmine-0.8.7/public redmine

■補足

どのようなURLで見せるかで設定を一部変える必要がある
1.「http://xxx.sakura.ne.jp/redmine/」の場合は、、、
  ・RAILS_ROOT/config/environments/production.rbには
   「ActionController::AbstractRequest.relative_url_root = ‘/redmine’」を追記する
2.「http://独自ドメイン/」の場合は、、、
  ・RAILS_ROOT/public/.htaccessに「RewriteBase /」を追加し、
  ・RAILS_ROOT/config/environments/production.rbには
   「ActionController::AbstractRequest.relative_url_root = ”」を追記する
今回自分は1を採用した。ご参考までに。

■おまけ

シェル一発でfcgiをインストールするスクリプト
(とはいっても上記コマンドをまとめただけですが)をgistに設置しました
gemコマンドが使える状態を確認した上でご自由にお使いください