Debian(lenny)での情報。
自分アプリのバグをtracで管理していて、その後redmineに移行しようと思ったもののredmineが重くてやる気にならず、オープンソースならgithubでチケットを管理するという方針にしたものの、オープンソースじゃないアプリやタスクをプライベートにしたい場合にやっぱりredmineが使いたくなった。
最新版のredmineなら速くなってるんじゃないかというのも期待して最新版にしてみることに。インストール済みなのは0.8でこの時点では1.0がリリースされている。1.0なら速いはずだ。
1. バックアップ
プログラムは別ディレクトリにいれるのでデータベースだけバックアップ。
http://www.redmine.org/wiki/redmine/RedmineUpgradeには
/usr/bin/mysqldump -u <username> -p<password> <redmine_database> | gzip > /path/to/backup/db/redmine_`date +%y_%m_%d`.gz
とあるが、普通にdumpする。
mysqldump -u root -p redmine > /tmp/redmine.dump.sql
2. Rubyモジュールの更新
redmine 0.8->1.0においてrubyは1.8.xのままでいいので、rails, rackを更新。apacheで動かすのでmod_railsことpassengerも更新しておく。一応rakeも。
rails (2.1.2) -> 2.3.5
rake (0.8.5) -> 0.8.7
passenger (2.2.2) -> 3.0.2
gem install rails -v=2.3.5
gem install rack -v=1.0.1
gem update rake passenger
2.1 passengerの設定
最終的にfastcgiを使ったのでpassengerはなくてもよい
passengerをapacheに組み込む。
/var/lib/gems/1.8/bin/passenger-install-apache2-module
The Apache 2 module was successfully installed.
Please edit your Apache configuration file, and add these lines:
LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-3.0.2/ext/apache2/mod_passenger.so
PassengerRoot /var/lib/gems/1.8/gems/passenger-3.0.2
PassengerRuby /usr/bin/ruby1.8
After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!
Deploying a Ruby on Rails application: an example
Suppose you have a Rails application in /somewhere. Add a virtual host to your
Apache configuration file and set its DocumentRoot to /somewhere/public:
<VirtualHost *:80>
ServerName www.yourhost.com
DocumentRoot /somewhere/public # <-- be sure to point to 'public'!
<Directory /somewhere/public>
AllowOverride all # <-- relax Apache security settings
Options -MultiViews # <-- MultiViews must be turned off
</Directory>
</VirtualHost>
And that's it! You may also want to check the Users Guide for security and
optimization tips, troubleshooting and other useful information:
/var/lib/gems/1.8/gems/passenger-3.0.2/doc/Users guide Apache.html
Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)
http://www.modrails.com/
という感じ。debianのapacheの管理方法に基づき、passengerモジュールの設定を入れる。
vi /etc/apache2/mods-available/passenger.load
で
LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-3.0.2/ext/apache2/mod_passenger.so
を
vi /etc/apache2/mods-available/passenger.conf
で
<IfModule passenger_module>
PassengerRoot /var/lib/gems/1.8/gems/passenger-3.0.2
PassengerRuby /usr/bin/ruby1.8
</IfModule>
をそれぞれ入力。
以下のコマンドでこの作った設定ファイルを有効にする。
a2enmod passenger
/etc/init.d/apache2 restart
3. remine-1.0を入れる
常に最新版を入れたいのでsubvresionで入れる。
cd /path/to/ror-apps/
svn co http://redmine.rubyforge.org/svn/branches/1.0-stable redmine-1.0
0.8の設定をコピー。新規の場合は.sampleをコピーしてつくる。
cp redmine-0.8/config/database.yml redmine-1.0/config/database.yml
cp -p redmine-0.8/public/dispatch.cgi redmine-1.0/public/dispatch.cgi
あとはhttp://www.redmine.org/wiki/redmine/RedmineInstallにしたがってすすめる。
rake generate_session_storeはi18nモジュールがなくて怒られたので
cd redmine-1.0
gem install -v=0.4.2 i18n
rake generate_session_store
RAILS_ENV=production rake db:migrateはmysqlモジュールがないといって怒られたので
gem install mysql
RAILS_ENV=production rake db:migrate
デフォルトデータ
RAILS_ENV=production rake redmine:load_default_data
でjaを選択。
apacheから書き込めるようにしておく
mkdir tmp public/plugin_assets
chown -R www-data:www-data files log tmp public/plugin_assets
chmod -R 755 files log tmp public/plugin_assets
vhostの設定で
Alias /redmine "/path/to/ror-apps/redmine-0.8/public"
を
Alias /redmine "/path/to/ror-apps/redmine-1.0/public"
に更新。
passengerをいれたときにMultiViewsを無効にしとけと言われたので
#Options +FollowSymLinks +ExecCGI
Options +FollowSymLinks +ExecCGI -MultiViews
とする。
さらにRewriteBase /redmine
を入れる。
ENV['RAILS_ENV'] ||= 'production'
のコメントを外しておく。
config.action_controller.relative_url_root='/redmine'
を書く。
4. cgiで動かない件
apache以前にスクリプトが動かない。
public/dispatch.cgi
/var/lib/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/cgi_process.rb:22:in `__send__': undefined method `env_table' for nil:NilClass (NoMethodError)
from /var/lib/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/cgi_process.rb:22:in `dispatch_cgi'
from /var/lib/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/dispatcher.rb:101:in `dispatch_cgi'
from /var/lib/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/dispatcher.rb:27:in `dispatch'
from public/dispatch.cgi:10
Rails 2.3.2, Apache2 and CGI not working
http://www.ruby-forum.com/topic/182327
undefined method `env_table’ for nil:NilClass (NoMethodError) with rev 3335
http://www.redmine.org/issues/4610
あたりに報告があるけど解決されてない模様。回避策としてFastCGI使えば?という感じなので仕方なく従うことに。
5. FastCGIでrubyを動かす
これもhttp://www.redmine.org/wiki/1/HowTo_configure_Apache_to_run_Redmineに情報がある。
aptitude search fastcgi
で libapache2-mod-fastcgi
を確認。
aptitude install libapache2-mod-fastcgi
/etc/init.d/apache2 restart
特に依存モジュールでfcgiが入らなかったのでおとなしくソースから入れる。
cd /usr/local/src/
wget http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
tar -zxvf fcgi-2.4.0.tar.gz
cd fcgi-2.4.0
./configure
make
make install
最後に以下を実行。
gem install fcgi
dispatch.fcgiはそのままサンプルのを使う。
cp -p public/dispatch.fcgi.example public/dispatch.fcgi
dispatch.fcgiを確実に参照させるように。
#<IfModule mod_fastcgi.c>
# RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
#</IfModule>
#<IfModule mod_fcgid.c>
# RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
#</IfModule>
#<IfModule mod_cgi.c>
# RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
#</IfModule>
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
これでtrac並のレスポンスが得られるようになった。www.redmine.org 自体もFastCGIを使ってるらしいし、おとなしくFastCGIを使うのがよさげ。